CREATE TABLE 테이블명 (
	컬럼명1 데이터타입 [규칙],
	컬럼명2 데이터타입 [규칙],
	...
);

규칙은 입력 값에 적용할 제약조건이나 속성

6개 제약조건/속성

PRIMARY KEY FOREIGN KEY NOT NULL ONLY INLINE UNIQUE CHECK DEFAULT ONLY INLINE

CREATE TABLE 학생 (
    학번 INT PRIMARY KEY,          -- INT: 정수형 숫자
    이름 VARCHAR(50) NOT NULL,     -- VARCHAR(50): 최대 50자 문자열
    학년 INT CHECK(학년 BETWEEN 1 AND 4),  -- BETWEEN: 범위 조건 (1 이상 4 이하)
    과목 VARCHAR(20),
    이메일 VARCHAR(50) UNIQUE
);

Named Constraints

줄을 따로 만들어 제약조건을 선언하며, 제약조건에 이름 붙이기: Named Constraints

CREATE TABLE 회원 (
    회원ID   CHAR(8),
    이메일   VARCHAR(100),
    등급     VARCHAR(10),
    CONSTRAINT PK_회원 PRIMARY KEY (회원ID),
		CONSTRAINT UQ_이메일 UNIQUE (이메일),
		CONSTRAINT CHK_등급 CHECK (등급 IN ('일반', 'VIP', 'VVIP')),
		CONSTRAINT CHK_나이 CHECK (나이 >= 18),
		CONSTRAINT FK_컬럼 FOREIGN KEY (컬럼) REFERENCES 부모테이블 (컬럼) -- 제일 어려운데 26-1에 나옴
);

NOT NULL을 named constraint로 사용 불가능!

CONSTRAINT NN_나이 NOT NULL (나이) -- 에러
나이 INT NOT NULL -- 동작

DEFAULT를 named constraint로 사용 불가능!

DEFAULT는 named constaint로 쓸 수 없다. 사실, DEFAULT는 엄밀히 말하면 제약constraint이 아니라 컬럼의 속성property이다.

CONSTRAINT def_등급 DEFAULT '일반' -- 표준 SQL에서 안됨
등급 VARCHAR(10) DEFAULT '일반' -- 동작

Inline FOREIGN KEY: FOREIGN KEY (컬럼) 쓰면 에러!

회원ID CHAR(8) FOREIGN KEY (회원ID) REFERENCES 회원(회원ID) -- 에러
회원ID CHAR(8) REFERENCES 회원(회원ID) -- 동작