01 DML
DML은 Data Manipulation Language란 의미로 DDL에서 정의한 대로 데이터를 입력하고, 입력된 데이터를 수정, 삭제, 조회하는 명령어이다.
INSERT
테이블에 데이터를 입력하는 명령어이다.
INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) VALUES (데이터1, 데이터2, ....);
INSERT INTO 테이블명 VALUES (전체 컬럼에 입력될 데이터 리트스);
UPDATE
이미 저장된 데이터를 수정하고 싶을 때 사용하는 명령어이다. WHERE 절이 없으면 테이블의 모든 Row가 변경되니 주의해야 한다.
UPDATE 테이블명 SET 컬럼명 = 새로운 데이터(WHERE 수정할 데이터에 대한 조건);
DELETE
이미 저장된 데이터를 삭제하고 싶을 대 사용하는 명령어이다. WHERE 절이 없으면 테이블의 모든 Row가 삭제되니 주의해야 한다.
DELETE FROM 테이블명 (WHERE 수정할 데이터에 대한 조건);
MERGE
테이블에 새로운 데이터를 입력하거나 이미 저장되어 있는 데이터에 대한 변경 작업을 한 번에 할 수 있도록 해주는 명령어이다.
MERGE
INTO 타켓 테이블명
USING 비교 테이블명
ON 조건
WHEN MATCHED THEN
UPDATE
SET 컬럼명 = 새로운 데이터 [, 컬럼명 = 새로운 데이터 ...]
WHEN NOT MATCHED THEN
INSERT [(컬럼명1, 컬럼명2 ...)]
VALUES (데이터1, 데이터2 ...);
02 TCL
TCL은 Transaction Control Language라는 의미로 트랜잭션을 제어하는 명령어이다. 트랜잭션이란 쪼개질 수 없는 업무처리의 단위인데 쉽게 말해 죽어도 한 세트로 묶일 수밖에 없는 논리적인 업무 단위라고 생각하면 된다.
트랜잭션의 특징
원자성(Atomicity) | 트랜잭션으로 묶인 일련의 동작들은 모두 성공하거나 모두 실패해야 한다. 즉, 살아도 같이 살고 죽어도 같이 죽는 관계가 되는 것이다 |
일관성(Consistency) | 트랜잭션이 완료된 후에도 데이터베이스가 가진 데이터에 일관성이 있어야 한다. 예를 들어 이미 결제된 티셔츠의 수량과 남아있는 티셔츠의 재고의 합은 언제나 쇼핑몰이 처음 보유하고 있었던 티셔츠의 총 수량과 일치해야 한다. |
고립성(Isolation) | 하나의 트랜잭션은 고립되어 수행되어야 한다. 만약 내가 구매하고자 하는 티셔츠를 지금 다른 사람이 먼저 구매하고 있다면 나는 재고 데이터를 참조하거나 변경할 수 없고 그 사람의 트랜잭션이 끝날 때까지 대기해야 한다. |
지속성(Durability) | 트랜잭션이 성공적으로 수행되었을 경우 트랜잭션이 변경한 데이터가 영구적으로 저장되어야 함을 의미한다. 쉽게 말해 모든 트랜잭션이 로그에 남겨진 뒤 COMMIT 되어야 하고, 그래서 시스템 장애가 발생하더라도 복구 가능해야 한다는 의미이다. |
COMMIT
INSERT, DELETE, UPDATE 후 변경된 내용을 확정, 반영하는 명령어이다. COMMIT을 실행하지 않으면 메모리까지만 반영이 되는데 메모리는 휘발성이기 때문에 언제든 사라질 수 있고 다른 사용자는 변경된 값을 조회할 수 없다. COMMIT을 실행해야 최종적으로 데이터 파일에 기록이 되고 비로소 트랜잭션이 완료되는 것이다.
ROLLBACK
INSERT, DELETE, UPDATE 후 변경된 내용을 취소하는 명령어이다.
SAVEPOINT
ROLLBACK을 수행할 때 전체 작업을 되돌리지 않고 일부만 되돌릴 수 있게 하는 기능을 가진 명령어이다.
03 DDL
DDL은 Data Definition Language란 의미로 데이터의 정의어, 즉 데이터를 정의하는 SQL이다.
CREATE
CREATE TABLE 테이블명(
컬럼명1 데이터 타입(DEFAULT / NULL 여부),
...
);
테이블 생성 시 반드시 지켜야 할 규칙
- 테이블명은 고유해야 한다.
- 한 테이블 내에서 컬럼명은 고유해야 한다.
- 컬럼명 뒤에 데이터 유형과 데이터 크기가 명시되어야 한다.
- 컬럼에 대한 정의는 괄호() 안에 기술한다.
- 각 컬럼들은 ,(콤마)로 구분된다.
- 테이블명과 컬럼명은 숫자로 시작될 수 없다.
- 마지막은 ;(세미콜론)으로 끝난다.
*같은 데이터를 저장하는 컬럼이 A 테이블에서는 CUSTOMER_ID 이고 B 테이블 에서는 MEMBER_ID 이면 좋지 않다.
제약조건의 종류
- PRIMARY KEY(기본키)
테이블에 저장된 각각의 Row에 대한 고유성을 보장한다. - UNIQUE KEY(고유키)
PRIMARY KEY와 유사하게 테이블에 저장된 Row에 대한 고유성을 보장하기 위한 제약조건이지만 NULL 값이 허용된다는 차이점이 있다. - NOT NULL
해당 컬럼에 NULL 값이 입력되는 것을 허용하지 않는 제약조건이다. - CHECK
컬럼에 저장될 수 있는 값의 범위를 제한한다. - FOREIGN KEY(외래키)
하나의 테이블이 다른 테이블을 참조하고자 할 대 FK를 정의해준다.
참조 무결성 규정 관련 옵션
CASCADE | Parent 값 삭제 시 Child 값 같이 삭제 |
SET NULL | Parent 값 삭제 시 Child 의 해당 컬럼 NULL 처리 |
SET DEFAULT | Parent 값 삭제 시 Child 의 해당 컬럼 DEFAULT 값으로 변경 |
RESTRICT | Child 테이블에 해당 데이터가 PK로 존재하지 않는 경우에만 Parent 값 삭제 및 수정 가능 |
NO ACTION | 참조 무결성 제약이 걸려있는 경우 삭제 및 수정 불가 |
ALTER
컬럼 추가, 컬럼 변경, 컬럼 삭제, 제약조건 추가, 제약조건 삭제 등을 할 수 있게 해준다.
①ADD COLUMN
새로운 컬럼을 추가할 때 쓰는 명령어
ALTER TABLE 테이블명 ADD 컬럼명 데이터 유형;
②DROP COLUMN
기존에 있던 컬럼이 필요 없어졌을 때 삭제하는 명령어
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
③MODIFY COLUMN
기존에 있던 컬럼을 변경하고 싶을 때 쓰는 명령어
ALTER TABLE 테이블명 MODIFY (컬럼명1 데이터 유형 [DEFAULT 값] [NOT NULL], 컬러명 2 데이터 유형 ...);
④RENAME COLUMN
기존에 있던 컬럼의 이름은 변경하고 싶을 때 쓰는 명령어
ALTER TABLE 테이블명 RENAME COLUMN 변경할 컬럼명 TO 변경할 이름;
⑤ADD CONSTRAINT
제약조건을 추가하고 싶을 때 쓰는 명령어
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (컬럼명);
⑥DROP TABLE
테이블을 삭제할 때 쓰는 명령어
CASCADE CONSTRAINT는 참조 제약조건도 함께 삭제한다는 의미이다.
DROP TALBE 테이블명 [CASCADE CONSTRAINT];
⑦TRUNCATE TABLE
테이블에 저장되어 있는 데이터를 모두 제거하는 명령어(ROLLBACK 불가능)
TRUNCATE TALBE 테이블명;
04 DCL
DCL은 Data Control Language란 의미로 USER를 생성하고, USER에게 데이터를 컨트롤 할 수 있는 권한을 부여하거나 회수하는 명령어이다.
USER 관련 명령어
하나의 DATABASE는 여러 개의 USER를 가질 수 있다. DATABASE를 하나의 집이라고 했을 때 그 집에 사는 사람의 수가 여러 명일 수 있는 것과 같은 이치이다.
①CREATE USER
사용자를 생성하는 명령어
CREATE USER 사용자명 IDENTIFIED BY 패스워드;
②ALTER USER
사용자를 변경하는 명령어
ALTER USER 사용자명 IDENTIFIED BY 패스워드;
③DROP USER
사용자를 삭제하는 명령어
DROP USER 사용자명;
권한 관련 명령어
①GRANT
사용자에게 권한을 부여하는 명령어
GRANT 권한 TO 사용자명;
②REVOKE
사용자에게 권한을 회수하는 명령어
REVOKE 권한 FROM 사용자명;
ROLE 관련 명령어
ROLE을 이용한 권한 부여
①ROLE을 생성한다.
CREATE ROLE 롤명;
②ROLE에 권한을 부여한다.
GRANT 권한 TO 롤명;
③ROLE을 사용자에게 부여한다.
GRANT 롤명 TO 사용자명;
출처 : 정미나. 「유선배 SQL개발자(SQLD) 과외노트」. (주)시대교육. 2023
'데이터베이스 > SQL' 카테고리의 다른 글
[SQLD] SQL 활용 (3) - Top-N 쿼리, 셀프 조인, 계층 쿼리 (0) | 2023.08.24 |
---|---|
[SQLD] SQL 활용 (2) - 그룹 함수, 윈도우 함수 (0) | 2023.08.22 |
[SQLD] SQL 활용 (1) - 서브쿼리, 뷰, 집합연산자 (0) | 2023.08.20 |
[SQLD] SQL 기본 (3) (0) | 2023.08.19 |
[SQLD] SQL 기본 (2) (0) | 2023.08.19 |