본문 바로가기

공부 자료/DataBase

[SQL] DDL : 데이터 정의어

DDL(Data Definition Langauge)

 

: 데이터 정의어(데이터베이스를 정의하는 언어)

: 데이터가 아닌 CREATE에 의해 생성된 것을 기준으로 함(즉, 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터베이스 개체를 대상으로 함)

: CREATE(생성), ALTER(변경), TRUNCATE(잘라내기), DROP(삭제)

 

[데이터베이스 생성 및 삭제]

-- 데이터베이스 생성
CREATE DATABASE 데이터베이스명;

-- 데이터베이스 삭제
DROP DATABASE 데이터베이스명;

CREATE

[테이블 생성]

CREATE TABLE 테이블명(
    칼럼명1  데이터 타입 PRIMARY KEY,
    칼럼명2 데이터 타입 NOT NULL,
    칼럼명3 데이터 타입 DEFAULT 값,
    ....,
    PRIMARY KEY(칼럼명1)
);

: PRIMARY KEY

- NOT NULL(default)이면서 UNIQUE하고 유일한 것으로 칼럼과 함께 지정도 가능하고, 마지막에 작성도 가능하며, 추후 추가도 가능

: NOT NULL - NULL을 허용하지 않음

: DEFAULT 값 - 작성한 값으로 디폴트 값 지정

 

[기존 테이블에서 데이터 가져와 테이블 생성]

CREATE TABLE 생성할 테이블명 AS (복사할 테이블의 SELECT문 작성)
CREATE TABLE emp_sub 
	AS SELECT empno, ename, job, hiredate, sal FROM emp WHERE deptno=10;

 

[빈 테이블 생성]

CREATE TABLE 생성할 테이블명 AS (SELECT * FROM 테이블명 WHERE 거짓조건문);
CREATE TABLE emp_t AS SELECT * FROM emp WHERE 1=2;

ALTER

[이미 생성된 테이블에 칼럼 추가]

ALTER TABLE 테이블명 ADD 칼럼명 데이터 형식 및 권한 설정;

[이미 있는 칼럼 데이터 형식 변경]

ALTER TABLE 테이블명  MODIFY COLUMN 변경할 칼럼명 변경할 데이터형식;

[칼럼 삭제]

ALTER TABLE 테이블명 DROP 칼럼명;

[칼럼명 변경]

ALTER TABLE 테이블명 RENAME COLUMN 기존 칼럼명 TO 변경할 칼럼명;

[테이블명 변경]

RENAME TABLE 기존 테이블명 TO 변경할 테이블명;

[테이블 삭제]

DROP TABLE 테이블명;

[데이터 삭제]

TRUNCATE TABLE 테이블명;
DELETE FROM 테이블명 (WHERE 조건절);

- TRUNCATE는 테이블을 삭제하지는 않지만 테이블의 내용은 모두 삭제하며, 메모리까지 삭제

- DELETE는 테이블을 삭제하지 않고 모든 데이터가 삭제되지만, 메모리는 유지


[constraint(제약조건)]

- PRIMARY KEY : 동일한 데이터 및 NULL값을 허용하지 않음 (unique & not null)

- NOT NULL : NULL값이 허용되지 않음

CREATE TABLE temp(
	id INT PRIMARY KEY,
	name VARCHAR(20) NOT NULL
);

INSERT INTO temp VALUES(null, 'jung'); -- 에러 : id에 null 값이 들어갈 수 없음
INSERT INTO temp VALUES(1, 'jang');
INSERT INTO temp VALUES(1, 'gong'); -- 에러 : 동일한 id 생성 불가
INSERT INTO temp VALUES(2, NULL); -- 에러 : 이름에 null이 들어갈 수 없음


- UNIQUE : 동일한 데이터를 허용하지 않지만 null은 허용되며, null은 중복도 허용

CREATE TABLE temp2(
	email VARCHAR(50) UNIQUE
);

INSERT INTO temp2 VALUES(null);
INSERT INTO temp2 VALUES('kosta@kosta.com');
INSERT INTO temp2 VALUES(null);
INSERT INTO temp2 VALUES('kosta@kosta.com'); -- 에러 : email 중복


- CHECK : 값의 범위 제한. check(조건)

CREATE TABLE temp3(
	name VARCHAR(20) NOT NULL,
	age INT DEFAULT 1 CHECK(age>0)
);

-- 칼럼값을 전부 넣을 것이 아닌 경우 칼럼명 명시가 필요
INSERT INTO temp3 (name) VALUES('hong');
INSERT INTO temp3 VALUES('song', -2); -- 에러 : age>0이라는 check 조건을 만족하지 않음
INSERT INTO temp3 VALUES('song', 1);