Structured Query Language의 약자로 데이터 베이스가 이해할 수 있는 구조화된 질의 언어입니다.
쉽게 말해서 우리가 영어를 공부 할 때 문법에 맞게 말을 해야 상대방이 알아 듣는 것 처럼 SQL도 문법에 맞게 작성해야 데이터베이스가 이해를 할 수 있습니다.
대표적인 관계형 DB로는 MySQL, Oracle, MariaDB 등이 있습니다.
MySQL을 기준으로 작성한 글입니다. SQL마다 조금씩 문법이 다를 수 있습니다!
데이터를 조회하거나 검색하기 위한 SELECT, 테이블에 있는 데이터에 변형을 가하는 INSERT, UPDATE, DELETE가 있습니다.
SELECT *
FROM [TABLE_NAME];
INSERT INTO [TABLE_NAME] (column, column, ...)
VALUES (value, value, ...);
UPDATE [TABLE_NAME]
SET column = value, ...
WHERE condition;
DELETE FROM [TABLE_NAME] WHERE condition;
테이블과 같은 데이터 구조를 정의하는데 사용합니다. 명령어로는 CREATE, DROP, ALTER, RENAME, TRUNCATE까 있습니다.
--데이터베이스 생성
CREATE DATABASE [NAME];
--테이블 생성
CREATE TABLE [NAME];
--데이터베이스 삭제
DROP DATABASE [NAME];
--테이블 삭제
DROP TABLE [NAME];
--컬럼 추가
ALTER TABLE [TABLE_NAME]
ADD [COLUMN_NAME] datatype;
--컬럼 삭제
ALTER TABLE [TABLE_NAME]
DROP COLUMN [COLUMN_NAME];
--컬럼 수정
ALTER TABLE [TABLE_NAME]
MODIFY COLUMN [COLUMN_NAME] datatype;
-- Fk 설정
ALTER TABLE [TABLE_NAME]
ADD FOREIGN KEY (column_name) REFERENCES [TABLE_NAME] (column_name);
TRUNCATE TABLE [TABLE_NAME];
RENAME TABLE [TABLE_NAME] TO [NEW_TABLE_NAME];
DROP, TRUNCATE, DELETE의 차이
- DELETE 명령어는 데이터는 지원지지만 테이블의 용량은 줄어 들지 않고 ROLLBACK을 통햬 데이터를 복구할 수 있습니다.
- TRUNCATE 명령어는 용량이 줄어 들고, 인덱스 등 모두 삭제가 되지만 데이터를 복구할 수 없습니다.
- DROP 명령어는 테이블 자체를 삭제합니다. 삭제 후 절대 되돌릴수 없습니다.
데이터의 보안성, 무결성, 회복, 병행, 수행 제어 등을 정의하는 데 사용합니다. 명령어로는 ROLLBACK, COMMIT, GRANT, REVOKE등이 있습니다.
-- INSERT, UPDATE, DELETE 등의 작업을 수행한 후 원래 상태로 되돌린다
-- DROP, TRUCATE등은 ROLLBACK이 불가하다.
ROLLBACK;
-- INSERT, UPDATE, DELETE 등의 작업을 수행한 후 완전히 저장
COMMIT;
-- 사용자 권한 부여
GRANT ALL PRIVILEGES ON [DB_NAME.TABLE_NAME]TO [user_name@host] IDENTIFIEDBY [PASSWORLD]
--- 설정한 권한 적용 명령어
FLASH PRIVILEGES;
--전체 권한 해제 명령어
REVOKE ALL ON [DB_NAME.TABLE_NAME] TO [user_name@host];
--특정 권한 해제 명령어
REVOKE INSERT, UPDATE, CREATE, ... ON [DB_NAME.TABLE_NAME] TO [user_name@host];
--권한 확인 명령어
SHOW GRANTS FOR [user_name@host];