[DB] SQL에 대해 알아보자!

Fleuve·2020년 12월 7일
1
post-thumbnail

SQL이란?

Structured Query Language의 약자로 데이터 베이스가 이해할 수 있는 구조화된 질의 언어입니다.
쉽게 말해서 우리가 영어를 공부 할 때 문법에 맞게 말을 해야 상대방이 알아 듣는 것 처럼 SQL도 문법에 맞게 작성해야 데이터베이스가 이해를 할 수 있습니다.
대표적인 관계형 DB로는 MySQL, Oracle, MariaDB 등이 있습니다.

MySQL을 기준으로 작성한 글입니다. SQL마다 조금씩 문법이 다를 수 있습니다!

1.DML(Data Manipulation Language)

데이터를 조회하거나 검색하기 위한 SELECT, 테이블에 있는 데이터에 변형을 가하는 INSERT, UPDATE, DELETE가 있습니다.

  • SELECT : 조회

SELECT * 
FROM [TABLE_NAME];
  • INSERT : 입력

INSERT INTO [TABLE_NAME] (column, column, ...) 
VALUES (value, value, ...);
  • UPDATE : 수정

UPDATE [TABLE_NAME] 
SET column = value, ... 
WHERE condition;
  • DELETE : 삭제

DELETE FROM [TABLE_NAME] WHERE condition;

2. DDL(Data Define Language)

테이블과 같은 데이터 구조를 정의하는데 사용합니다. 명령어로는 CREATE, DROP, ALTER, RENAME, TRUNCATE까 있습니다.

  • CREATE : 생성

--데이터베이스 생성
CREATE DATABASE [NAME];
--테이블 생성
CREATE TABLE [NAME];
  • DROP : 삭제

--데이터베이스 삭제
DROP DATABASE [NAME];
--테이블 삭제
DROP TABLE [NAME];
  • ALTER : 테이블 내용 수정

    테이블의 내용을 수정하는 명령어인 만큼 사용 방법이 다양합니다.
--컬럼 추가
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 : 데이터 삭제

TRUNCATE TABLE [TABLE_NAME];
  • RENAME : 이름 변경

RENAME TABLE [TABLE_NAME] TO [NEW_TABLE_NAME];

DROP, TRUNCATE, DELETE의 차이

  • DELETE 명령어는 데이터는 지원지지만 테이블의 용량은 줄어 들지 않고 ROLLBACK을 통햬 데이터를 복구할 수 있습니다.
  • TRUNCATE 명령어는 용량이 줄어 들고, 인덱스 등 모두 삭제가 되지만 데이터를 복구할 수 없습니다.
  • DROP 명령어는 테이블 자체를 삭제합니다. 삭제 후 절대 되돌릴수 없습니다.

3. DCL(Data Control Language)

데이터의 보안성, 무결성, 회복, 병행, 수행 제어 등을 정의하는 데 사용합니다. 명령어로는 ROLLBACK, COMMIT, GRANT, REVOKE등이 있습니다.

  • ROLLBACK

    작업했던 내용을 원래의 상태로 복구
-- INSERT, UPDATE, DELETE 등의 작업을 수행한 후 원래 상태로 되돌린다
-- DROP, TRUCATE등은 ROLLBACK이 불가하다.

ROLLBACK;
  • COMMIT

    작업했던 내용을 완전히 저장(COMMIT 후에는 ROLLBACK을 할 수 없다)
-- INSERT, UPDATE, DELETE 등의 작업을 수행한 후 완전히 저장

COMMIT;
  • GRANT

    사용자에게 권한을 부여
-- 사용자 권한 부여
GRANT ALL PRIVILEGES ON [DB_NAME.TABLE_NAME]TO [user_name@host] IDENTIFIEDBY [PASSWORLD]

--- 설정한 권한 적용 명령어
FLASH PRIVILEGES;
  • REVOKE

    GRANT로 부여한 권한을 해제
--전체 권한 해제 명령어
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];

0개의 댓글