관리 구문
DML
DML 명령어
INSERTUPDATEDELETEMERGE
INSERT
-- 컬럼 리스트를 지정하는 방법
INSERT INTO 테이블명 (컬럼 리스트)
VALUES (값 리스트);
-- 전체 컬럼에 순서대로 입력하는 방법
INSERT INTO 테이블명
VALUES (전체 컬럼 값 리스트);UPDATE
UPDATE 테이블명
SET 컬럼명 = 새로운 값;MERGE : 데이터가 존재하는지에 따라 UPDATE, INSERT, 경우에 따라 DELETE까지 나누어 실행하는 SQL.
MERGE INTO 대상테이블 T
USING 비교할데이터 S
ON (T.ID = S.ID)
WHEN MATCHED THEN
UPDATE SET T.NAME = S.NAME
WHERE S.NAME IS NOT NULL
WHEN NOT MATCHED THEN
INSERT (ID, NAME)
VALUES (S.ID, S.NAME)
WHERE S.NAME IS NOT NULL;MERGE INTO: 데이터를 반영할 대상 테이블.USING: 비교하거나 가져올 원본 데이터.ON: 기존 데이터와 원본 데이터의 일치 조건.WHEN MATCHED: 일치하는 행이 있을 때 실행할 작업.WHEN NOT MATCHED: 일치하는 행이 없을 때 실행할 작업.WHERE: 조건을 만족하는 행에만 UPDATE 또는 INSERT를 실행하도록 제한하는 조건.
TCL
트랜잭션(Transaction) : 데이터베이스의 논리적 연산 단위.
트랜잭션의 특성 (ACID)
- 원자성(Atomicity) : 트랜잭션 내의 모든 작업은 모두 수행되거나 모두 수행되지 않아야 한다.
- 일관성(Consistency) : 트랜잭션 수행 전과 후에 데이터는 항상 일관된 상태를 유지해야 한다.
- 고립성(Isolation) : 트랜잭션이 수행 중일 때 다른 트랜잭션의 영향을 받아 잘못된 결과를 도출하는 것을 방지하기 위한 특성. 트랜잭션 수행과 커밋 사이의 텀에 다른 트랜잭션이 수행 및 커밋되어 예상과 다른 결과가 나타나는 것이 고립성 문제의 예이다.
- 지속성(Durability) : 트랜잭션이 커밋된 후에는 그 결과가 영구적으로 반영되어야 한다.
트랜잭션 시작과 종료 (SQL Server) : BEGIN TRANSACTION으로 트랜잭션을 시작하고, COMMIT TRANSACTION 또는 ROLLBACK TRANSACTION으로 종료한다. TRANSACTION은 생략할 수 있다.
COMMIT : 트랜잭션에서 수행한 변경을 확정하고 영구적으로 반영한다.
Oracle vs SQL Server DDL 트랜잭션 처리
- Oracle : DDL 문장 수행 후 자동으로 COMMIT된다. DDL 수행은 내부적으로 트랜잭션을 종료한다.
- SQL Server : DDL도 트랜잭션 범주에 포함되며 자동 COMMIT되지 않는다.
ROLLBACK : COMMIT되지 않은 상위의 모든 트랜잭션을 취소한다. 최초의 BEGIN TRANSACTION까지의 모든 변경이 롤백된다.
SAVEPOINT : 트랜잭션 내에서 저장점을 지정하면 전체 롤백 대신 해당 저장점까지만 부분 롤백할 수 있다.
- Oracle
SAVEPOINT 세이브포인트명;
...
ROLLBACK TO 세이브포인트명;- SQL Server
SAVE TRANSACTION 세이브포인트명;
...
ROLLBACK TRANSACTION 세이브포인트명;DDL
DDL 명령어
CREATEALTERDROPTRUNCATE
DROP vs TRUNCATE vs DELETE
| DROP | TRUNCATE | DELETE | |
|---|---|---|---|
| 분류 | DDL | DDL | DML |
| ROLLBACK | 불가 | 불가 | COMMIT 이전 가능 |
| Auto Commit | O (Oracle) | O (Oracle) | 직접 COMMIT 필요 |
| Storage | 전체 Release | 최초 할당분만 남기고 Release | Release 안 함 |
| 결과 | 테이블 정의 자체 삭제 | 테이블을 최초 생성 시 상태로 초기화 | 데이터만 삭제 |
테이블 생성 주의사항
- 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용하며, 가능하면 단수형을 사용한다.
- 테이블명은 다른 테이블의 이름과 중복되면 안 된다.
- 한 테이블 내에서는 칼럼명이 중복되면 안 된다.
- 각 칼럼들은 괄호로 묶어 콤마로 구분하고, 생성문의 끝은 세미콜론으로 끝낸다.
- 칼럼 뒤에 데이터 유형을 반드시 지정해야 한다.
- 테이블명과 칼럼명은 반드시 문자로 시작해야 하며, 벤더에서 사전에 정의한 예약어는 사용할 수 없다.
- 허용 문자 : A-Z, a-z, 0-9,
_,$,#
제약조건의 종류
PRIMARY KEY(기본키)UNIQUE KEY(고유키)NOT NULLCHECKFOREIGN KEY(외래키)
외래키(FOREIGN KEY) 특성
- 테이블 생성 시 설정할 수 있다.
NULL값을 가질 수 있다.- 한 테이블에 하나 이상 생성할 수 있다.
- 외래키 값은 참조 무결성 제약을 받을 수 있다.
PK 제약조건 지정
ALTER TABLE방식 : 기존 테이블에 추가할 때 사용한다.
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명 PRIMARY KEY (칼럼명);CREATE TABLE인라인 방식 : 테이블 생성 시 괄호 안에 직접 지정한다.
CONSTRAINT 제약조건명 PRIMARY KEY (칼럼명)외래키 제약조건 추가 : 기존 테이블에 외래키 제약조건을 추가할 때는 ALTER TABLE을 사용한다.
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명 FOREIGN KEY(컬럼) REFERENCES 참조할테이블(컬럼);칼럼 삭제
ALTER TABLE 테이블명
DROP COLUMN 삭제할 칼럼명;칼럼 정의 변경
- Oracle :
MODIFY사용. 여러 칼럼을 괄호로 묶어 한 번에 변경할 수 있다.
ALTER TABLE 테이블명
MODIFY (칼럼명1 데이터유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터유형, ...)- SQL Server :
ALTER COLUMN사용. 칼럼 하나씩 지정한다.
ALTER TABLE 테이블명
ALTER COLUMN 칼럼명 데이터유형 [DEFAULT 식] [NOT NULL]참조 동작(Referential Action)
Delete/Modify Action : Master 행 삭제 또는 수정 시 Child 행을 어떻게 처리할지 지정한다.
- Cascade : Master 삭제 시 Child 함께 삭제.
- Set Null : Master 삭제 시 Child의 해당 외래키 칼럼을
NULL로 변경. - Set Default : Master 삭제 시 Child의 해당 외래키 칼럼을 기본값으로 변경.
- Restrict : Child 테이블에 해당 PK 값을 참조하는 행이 없는 경우에만 Master 삭제 허용.
- No Action : 참조 무결성을 위반하는 삭제/수정 액션을 취하지 않음.
Insert Action : Child 행 삽입 시 Master에 해당 PK가 없을 때 처리 방식을 지정한다.
- Automatic : Master에 PK가 없으면 Master PK를 먼저 생성한 뒤 Child 입력.
- Set Null : Master에 PK가 없으면 Child 외래키를
NULL로 처리. - Set Default : Master에 PK가 없으면 Child 외래키를 기본값으로 입력.
- Dependent : Master에 PK가 존재할 때만 Child 입력 허용.
- No Action : 참조 무결성을 위반하는 입력 액션을 취하지 않음.
DCL
GRANT : 사용자에게 권한을 부여한다.
WITH GRANT OPTION : GRANT와 함께 사용하면 권한을 부여받은 사용자가 동일한 권한을 다른 사용자에게 부여할 수 있다.
REVOKE : 사용자에게 부여했던 권한을 회수한다.
REVOKE 권한
ON 객체
FROM 사용자;