CREATE TABLE문 일반 형식

CREATE TABLE 테이블명 (

칼럼명1    데이터타입    [NULL | NOT NULL],

...

칼럼명N    데이터타입    [NULL | NOT NULL],

[CONSTRAINT    제약조건명1    PRIMARY KEY (칼럼명1, 칼럼명2, ...)],

[CONSTRAINT    제약조건명2    FOREIGN KEY (칼럼명1, 칼럼명2, ...) REFERENCES 참조테이블명 (칼럼명1, 칼럼명2, ...)]);


  • 테이블명 정의
    • 사용자 이름(U)에 속한 각 테이블명은 유일해야 한다.
    • 30자 초과 불가
    • 문자로 시작
    • 문자, 1~9까지의 숫자, _$# 3개 가능
    • SQL 예약어 사용 불가

  • 칼럼명 정의
    • 하나의 테이블에서 칼럼명 유일해야 한다.
    • 30자 초과 불가
    • 문자로 시작
    • 문자, 1~9까지의 숫자, _$# 3개 가능
    • SQL 예약어 사용 불가

  • 체크 제약조건으로 테이블의 칼럼에 값을 제한
  • 칼럼명 데이터타입 [NULL | NOT NULL] [CONSTRAINT 제약조건명] [CHECK (조건)]


  • 테이블에 기본 키 제약조건 지정
    • 기본 키 칼럼에 중복된 데이터 허용 불가
    • 기본 키 칼럼에 NULL값 허용 불가
    • 기본 키 칼럼은 자동으로 NOT NULL이 됨
    • 기본 키를 구성하는 칼럼의 최대 수는 16개
    • 기본 키가 단일 칼럼일 때, 기본 키 칼럼에 'PRIMARY KEY' 혹은 'CONSTRAINT 제약조건명 PRIMARY KEY'를 명시적으로 선언 가능

  • 테이블에 외부 키 제약조건 지정
    • 외부 키 칼럼의 수와 참조하는 테이블의 기본 키 칼럼의 수가 동일해야 함
    • 외부 키 칼럼의 데이터타입과 참조하는 테이블의 기본 키 칼럼의 데이터 타입이 동일해야 함
    • 외부 키 칼럼의 데이터타입을 생략하면, 참조하는 테이블의 기본 키 칼럼의 데이터타입을 참조 함
    • 테이블 생성시 참조할 테이블의 기본 키 칼럼은 생략할 수 있음
    • 단일 칼럼의 외부 키 제약조건은, 외부 키 칼럼에 'CONSTRAINT 제약조건명 FOREIGN KEY REFERENCES 참조할테이블명'을 명시적으로 선언 가능

  • 테이블 칼럼에 고유 키 제약조건 지정
  • 칼럼명 데이터타입 [NULL | NOT NULL] UNIQUE


  • 칼럼에 기본 값 지정
    • 기본 값을 지정하는 칼럼은 NOT NULL 제약조건을 지정하지 않음

    칼럼명 데이터타입 [DEFAULT 값]

테이블 생성

create table p (

  pdtno number(3) not null,

  pdtname varchar2(25),

  qty number(6, 2),

  constraint pdtnopk primary key(pdtno)

);


create table pc (

  pdtno number(3) not null,

  constraint pdtnofk foreign key(pdtno) references p(pdtno)

);


이렇게 하면 pc(pdtno)가 p(pdtno)를 참조한다.

따라서 p 테이블의 레코드는 맘대로 삭제도 못 함.

그러나 pc 테이블을 다음과 같이 생성하면,


create table pc (

  pdtno number(3) not null,

  constraint pdtnofk foreign key(pdtno) references p(pdtno) on delete cascade

);


p 테이블의 레코드를 삭제하면 pc 테이블의 레코드가 연쇄적으로 삭제된다.


on delete cascade 이외에 on delete set null 라는 제약도 있다.

부모 레코드가 삭제되면 자식 레코드가 null이 된다.

+ Recent posts