DDL에는 어떤 것들이 있을까?
데이터 정의어 (DDL, Data Definition Language)
--
DDL은
데이터베이스의 구조를 정의하고 변경하는 명령어를 의미한다.
주로 DB의 테이블, 인덱스, 뷰, 스키마 등의 데이터베이스 객체를 생성, 수정, 삭제하는 역할을 수행한다.
대표적인 DDL 명령어
- CREATE : 데이터베이스 객체(테이블, 인덱스 등)를 생성
- ALTER : 데이터베이스 객체를 수정
- DROP : 데이터베이스 객체를 삭제
- TRUNCATE : 테이블에 담긴 모든 데이터를 삭제 (테이블 구조는 그대로)
--
CREATE 문
--
CREATE문은
객체(테이블, 인덱스, 뷰, 스키마 등)를 생성하는 명령어로
테이블을 구성하고, 속성과 속성에 관한 제약을 정의하며, 기본키 및 외래키를 정의하는 명령어다.
CREATE문 형식
CREATE TABLE <테이블 이름> (
<속성 이름> <데이터 타입> [제약조건],
<속성 이름> <데이터 타입> [제약조건],
<속성 이름> <데이터 타입> [제약조건]
);
CREATE문 예시
CREATE TABLE Book (
bookId INT PRIMARY KEY,
bookName VARCHAR(20),
publisher VARCHAR(20),
price INT
);
CREATE TABLE Book (
bookId INT,
bookName VARCHAR(20),
publisher VARCHAR(20),
price INT,
PRIMARY KEY (bookId)
);
이렇게 키를 밑으로 따로 작성해 주는 것도 가능하다.
Book이라는 테이블을 생성하는데
bookId 속성은 INT타입의 데이터를 저장할 수 있으며, 기본키로 지정
bookName 속성은 최대 20크기까지의 문자열만 저장 가능
publicsher 속성은 최대 20크기까지의 문자열만 저장 가능
price 속성은 INT타입의 데이터만 저장 가능
CREATE TABLE Book (
bookName VARCHAR(20) NOT NULL,
publisher VARCHAR(20) UNIQUE,
price INT DEFAULT 10000 CHECK(price > 1000),
PRIMARY KEY (bookName, publisher)
);
Book이라는 테이블을 생성하는데
bookName 속성은 최대 20크기의 문자열만 저장할 수 있고 Null값은 저장 불가능
publisher 속성은 최대 20크기의 문자열만 저장할 수 있고 중복된 값은 저장 불가능
price 속성은 INT 타입의 데이터만 저장할 수 있고,
값을 따로 지정하지 않으면 기본값으로 10000이 자동으로 저장되며,
데이터는 1000을 초과하는 값만 저장 가능
bookName과 publisher 속성은 기본키(복합키)로 지정
(두 속성을 조합하여 기본키로 지정 = (bookName, publisher)는 기본키O, (bookName)은 기본키X)
만약 다른 테이블에서 해당 릴레이션을 외래키로 참조하려고 하면 복합키 전부를 참조하여 가져와야 한다.
CREATE TABLE Orders (
orderId INT,
custId INT NOT NULL,
orderDate DATE,
PRIMARY KEY (orderId),
FOREIGN KEY (custId) REFERENCES Customer(custId) ON DELETE CASCADE
);
만약 복합키를 사용하는 테이블을 외래키로 참조하려면
bookName VARCHAR(20),
publisher VARCHAR(20) UNIQUE,
FOREIGN KEY (bookName, publisher) REFERENCES Book(bookName, publisher)
이런 식으로 참조하면 된다.
(외래키를 참조할 때 참조하는 기본키의 제약조건을 동일하게 적용하지 않아도 된다.)
Orders이라는 테이블을 생성하는데
orderId 속성은 INT 타입의 테이터만 저장 가능하고, 기본키로 지정
custId 속성은 INT 타입의 데이터만 저장 가능하고, NULL값은 저장 불가능
orderDate 속성은 DATE 타입의 데이터만 저장 가능
custId 속성은 Customer테이블의 custId속성(기본키)을 참조하는 외래키로 지정하고
만약 Orders테이블에서 해당 custId 속성의 데이터를 삭제하면 Customer테이블에서도 삭제되도록 적용했다.
외래키를 정의할 때 사용하는 전용 옵션
- ON DELETE : 부모 테이블에서 참조하고 있는 속성의 데이터(행)를 삭제할 때 어떤 동작을 할지
- ON UPDATE : 부모 테이블에서 참조하고 있는 속성의 데이터(행)을 수정할 때 어떤 동작을 할지
(만약 해당 옵션을 생략하면 기본 동작으로 NO ACTION 적용된다.)
- CASCADE : 자식 테이블의 데이터(행)에도 똑같이 적용
- SET NULL : 자식 테이블의 데이터(행)에는 NULL로 변경
- RESTRICT : 부모 테이블에서 데이터(행)의 삭제 및 수정 불가능(거절)
- NO ACTION(기본값) : RESTRICT와 동일하게 동작 (추가적인 조건이 있지만 신경 쓸 필요는 없을 것 같다.)
- SET DEFAULT : 자식 테이블의 데이터(행)에는 해당 속성의 기본값으로 수정
Customers, Orders 테이블이 존재한다고 가정하면
Orders 테이블에서 외래키로 Customers 테이블의 기본키를 참조 중
Customers 테이블 = 부모 테이블
Orders 테이블 = 자식 테이블
--
ALTER 문
--
ALTER문은
CREATE문으로 생성된 테이블의 속성과 속성에 관한 제약을 변경하며,
기본키 및 외래키를 변경할 때 사용하는 명령어다.
ALTER문 형식
ALTER TABLE <테이블 이름> {ADD COLUMN | MODIFY COLUMN | DROP COLUMN | RENAME COLUMN TO} [세부 내용];
- ADD : 속성(열) 추가
- DROP : 속성(열) 제거
- MODIFY : 속성(열) 수정
- ALTER : 속성(열) 수정
- RENAME : 테이블 이름 변경
ADD COLUMN에서 COLUMN은 생략이 가능하지만 (ADD == ADD COLUMN) (다른 것은 생략 불가능)
명확성을 위해 작성하는 것이 좋다.
MODIFY COLUMN과 ALTER COLUMN의 차이?
둘 다 속성을 수정하는 명령어지만, 데이터베이스 시스템에 따라 다르게 동작하며,
DBMS에 따라 지원 여부나 사용 방식이 다르다.
MODIFY COLUMN은
주로 MySQL과 같은 DBMS에서 사용하고
ALTER COLUMN은
주로 SQL Server와 같은 Microsoft SQL Server에서 사용된다.
ALTER문 예시
ALTER TABLE Book ADD COLUMN price INT;
Book 테이블에 INT 타입만 저장할 수 있는 price 속성(열)을 추가
ALTER TABLE Book DROP COLUMN price;
Book 테이블에 있는 price 속성(열)을 삭제
ALTER TABLE Book ALTER COLUMN price INT;
ALTER TABLE Book MODIFY COLUMN price INT;
ALTER TABLE BOOK MODIFY COLUMN bookName VARCHER(50) NOT NULL UNIQUE;
Book 테이블에 있는 price 속성(열)을 INT 타입으로 변경
Book 테이블에 있는 bookName 속성(열)을 VARCHAR(50) 타입과 NOT NULL과 종복 불가로 수정
ALTER TABLE Book ADD PRIMARY KEY(bookId);
Book 테이블에서 bookId 속성(열)을 추가하고 기본키로 지정한다.
(만약 해당 테이블에 기본키가 존재한다면 해당 속성을 삭제 후 새로 만들어서 기본키로 지정해야 한다.)
--
DROP 문
--
DROP문은
테이블을 삭제하는 명령어로
테이블의 구조와 데이터를 모두 삭제하므로 주의해야 한다.
DROP문 형식
DROP TABLE <테이블 이름>
DROP문 예시
DROP TABLE Book
Book 테이블을 데이터베이스에서 삭제한다.
--
TRUNCATE 문
--
TRUNCATE문은
해당 테이블에 있는 모든 데이터만 삭제하고 테이블 구조는 유지하는 명령어다.
TRUNCATE문 형식
TRUNCATE TABLE <테이블 이름>
TRUNCATE문 예시
TRUNCATE TABLE Book
Book 테이블에 저장된 모든 데이터를 삭제한다.
데이터베이스에는 Book 테이블 구조는 그대로 존재한다.
(마치 Book 테이블을 생성했을 때처럼 테이블은 존재하고 데이터는 존재하지 않는다.)
--
'SQL [DB]' 카테고리의 다른 글
[SQL문] 데이터 제어어 (DCL) (0) | 2024.09.13 |
---|---|
[SQL문] 데이터 조작어 (DML) (0) | 2024.09.12 |
관계 데이터 모델의 개념 (릴레이션, 무결성, 관계대수) (0) | 2024.09.10 |
데이터베이스 시스템의 구성 (0) | 2024.09.10 |
DB, RDB, DBMS, RDBMS (0) | 2024.09.09 |