SQL

SQL 문법정리 : 테이블생성

Nova 2021. 2. 22. 17:17

SQL 문법정리 : 테이블생성

 

테이블 생성 시 컬럼의 제약 조건

. NOT NULL    

해당 제약 조건이 있는 컬럼은 NULL이 저장될수 없다.

 

. UNIQUE

해당 제약 조건이 있는 컬럼의 값은 테이블 내에서 유일해야 한다.

 

. PRIMARY KEY

해당 제약 조건이 있는 컬럼의 값은 테이블내에서 유일해야 하고 반드시 NOT NULL이어야 한다.

 

. CHECK

해당 제약 조건이 있는 컬럼은 지정하는 조건에 맞는 값이 들어가야 한다.

 

.REFERENCES

해당 제약 조건이 있는 컬럼의 값은 참조하는 테이블의 특정 컬럼에 값이 존재해야 한다.

 

CREATE TABLE ACCOUNT

(

 USER_ID SERIAL PRIMARY KEY

 ,USERNAME VARCHAR (50) UNIQUE NOT NULL

 ,PASSWORD VARCHAR(50) NOT NULL

 ,EMAIL VARCHAR(355) UNIQUE NOT NULL

 ,CREATED_ON TIMESTAMP NOT NULL

 ,LAST_LOGIN TIMESTAMP

); 

 

CREATE TABLE ROLE

(

 ROLE_ID SERIAL PRIMARY KEY

 ,ROLE_NAME VARCHAR (255) UNIQUE NOT NULL

)

;

 

CREATE TABLE ACCOUNT_ROLE

(

 USER_ID INTEGER NOT NULL

,ROLE_ID INTEGER NOT NULL

,GRANT_DATE TIMESTAMP WITHOUT TIME ZONE

,PRIMARY KEY(USER_ID, ROLE_ID)

,CONSTRAINT ACCOUNT_ROLE_ROLE_ID_FKEY FOREIGN KEY (ROLE_ID)

 REFERENCES ROLE (ROLE_ID) MATCH SIMPLE

 ON UPDATE NO ACTIONN ON DELETE NO ACTION

,COSTRAIN ACCOUNT_ROLE_USER_ID_FKEY FOREIGN KEY(USER_ID)

 REFERENCES ACCOUNT(USER_ID) MATCH SMIPLE ON

 UPDATE NO ACTION ON DELETE NO ACTION

);

 

#USER_ID는 NOT NULL이여야 한다.

#ROLE_ID는 NOT NULL이여야 한다.

#GRANT_DATE는 NULL이여도 상관없다.

#기본키는 USER_ID+ROLE_ID로 한다.

#ROLE_ID 컬럼은 ROLE테이블의 ROLE_ID컬럼을 참조한다.

#ROLE_ID 컬럼은 ROLL테이블의 ROLE_ID컬럼에 대한 삭제 혹은 변경시 아무것도 하지 않는다.

#USER_ID 컬럼은 ACCOUNT테이블의 USER_ID컬럼을 참조한다.

#USER_ID 컬럼은 ACCOUNT테이블의 USER_ID컬럼에 대한 삭제 혹은 변경시 아무것도 하지 않는다.

 

INSERT INTO ACCOUNT VALUES

(1, '홍길동','1234','ABCEDF@naver.com',CURRENT_TIMESTAMP, null);