(SQLD) DDL
1. DDL 테이블 생성
● 테이블명 생성 규칙
- 객체를 의미할 수 있는 이름으로 단수형 권고
- 다른 테이블의 이름과 중복X
● 칼럼명 생성 규칙
- 한 테이블 내에서 중복X
- 테이블 생성시 각 칼럼은 ','로 구분
- 칼럼 뒤에 데이터 유형이 반드시 지정되어야 함
● 테이블, 칼럼명
- 사전에 정의된 예약어 사용 불가
- 테이블과 칼럼명에는 문자, 숫자, 일부기호(_,$,#)만 허용
- 테이블과 칼럼명은 반드시 문자로 시작해야함(숫자, 기호는 불가)
● 제약조건명
- 다른 제약조건의 이름과 중복X
2. Data Types
● CHAR(n) : 고정 문자열
● VARCHAR(n) : 가변길이 문자열(VARCHAR2와 차이없음)
● NUMBER : 정수, 실수 등
- NUMBER(전체자릿수, 소수자릿수) 로 소수점 표현 가능
● DATE : 날자, 시간정보
3. 제약조건
● 기본키(Primary Key/PK) : 기본키 정의, NOT NULL, UNIQUE, 하나의 테이블에 하나의 기본키만 존재 가능
CREATE TAB1(
COL1 CHAR(3) NOT NULL,
COL2 CHAR(3),
COL3 NUMBER,
CONSTRAINT TAB1_PK PRIMARY KEY (COL1));
/*COL1을 TAB1_PK라는 이름의 제약조건으로 TAB1의 PK로 설정*/
● 외래키(Foreign Key/FK) : 다른 테이블의 기본키를 참조하는 외래키를 지정, 외래키 지정시 참조 무결성 제약 옵션 선택
CREATE TAB1(
COL1 CHAR(3) NOT NULL,
COL2 CHAR(3),
COL3 NUMBER,
CONSTRAINT TAB1_PK PRIMARY KEY (COL1));
CONSTRAINT TAB1_FK FOREIGN KEY (COL2) REFERENCES TAB2(COLM1)
/*TAB2 테이블은 이미 존재하고 해당 테이블의 PK는 COLM1이라고 가정*/
/*COL2을 TAB1_FK라는 이름의 제약조건으로 TAB1의 FK로 설정*/
● NOT NULL : NULL의 입력을 비허용
● UNIQUE : 해당 칼럼의 값은 테이블에서 유일하다
● CEHCK : 입력값을 제한하는 기능
CREATE TABLE TAB1(
COL1 VARCHAR2(20) CONSTRAINT CON_NAME1 UNIQUE,
COL2 VARCHAR2(20) CONSTRAINT CON_NAME2 NOT NULL,
COL3 VARCHAR2(20) CONSTRAINT CON_NAME3 CHECK (CONSTRAINT));
ALTER TABLE TAB1
ADD CONSTRAINT CONSTRAINT_NAME CHECK (CONSTRAINT);
/*ALTER TABEL에서 조건으로 사용될 수도 있음*/
4. FK 제약조건
● 트리거 액션 : 행위 발생시 연쇄되어 작용
- ON UPDATE : 업데이트 발생시
- ON DELETE : 삭제 발생시
● 참고 액션 : 행위 발생시 특수한 조건을 삽입
- RESTRICT(Default값) : 기본값의 삭제, 갱신을 불허
- NO ACTION : RESTRICT와 동일
- CASCADE : UPDATE시 이를 참조하는 외래키도 UPDATE, DELETE시 이를 참조하는 레코드도 DELETE
- SET NULL : 트리거 액션 발생시 참조FK를 NULL로 업데이트
CREATE TAB1(
COL1 CHAR(3) NOT NULL,
COL2 CHAR(3),
COL3 NUMBER,
CONSTRAINT TAB1_PK PRIMARY KEY (COL1))
CONSTRAINT TAB1_FK FOREIGN KEY (COL2) REFERENCES TAB2(COLM1)
ON DELETE CASCADE ON UPDATE RESTRICT;
5. SELECT, ALTER 응용 제약조건
● SELECT 를 통한 테이블 생성
CREATE TABLE TAB1
AS SELECT * FROM TAB2;
/*TAB2테이블이 복제되어 TAB1에 삽입*/
● ALTER 를 통한 테이블 변형
ALTER TABEL TAB1
ADD COL1 NUMBER NOT NULL
DROP COLUMN COL2
RENAME COLUMN COLEEE TO COL3
MODIFY COLUMN COL4 VARCHAR2(30) NOT NULL;
● MODIFY 정의 수정 유의사항
- 이미 입력되어있는 값에 영향을 미치면 안됨
- 모두 NULL이면 제약 없이 가능
- 데이터 용량 확대 가능, 축소는 이미 입력된 값중 최저 용량으로 가능
- NOT NULL 제약조건 추가시 이미 NULL이 존재하면 불가능