본문 바로가기
SQL

MSSQL 1.무결성 제약조건 - FOREIGN KEY, CHECK, UNIQUE

by flykimjiwon 2022. 8. 4.
반응형

- FOREIGN KEY

형식: 컬럼명

데이터타입

CONSTRAINT 외래키 이름 FOREIGN KEY(참조컬럼) REFERENES 참조테이블명(참조컬럼)

참조컬럼 2개가 같아야 생성이 된다.

CREATE TABLE PRODUCT (
	PRODUCTNO INT,
	PRODUCTNAME VARCHAR(10) NOT NULL, 
	MAKEDAY DATETIME,
	PRICE FLOAT,
	PRODUCTINFO VARCHAR(MAX)
PRIMARY KEY(PRODUCTNO)
);

CREATE TABLE MARKET_CART(
	CARTNO INT,
	USERNO INT,
	PRODUCTNO INT,
	--아래 제약조건, [제약조건 FK_여기서_참조하는거 FOREIGN KEY(참조할열) 레퍼런스 참조테이블(참조열)]
	--그냥 규칙이다!
CONSTRAINT FK_MARKETCART_PRODUCTNO FOREIGN KEY(PRODUCTNO) REFERENCES PRODUCT(PRODUCTNO),
PRIMARY KEY (CARTNO)
)

INSERT INTO PRODUCT
(
PRODUCTNO,
PRODUCTNAME,
MAKEDAY,
PRICE,
PRODUCTINFO -- 컬럼 전부 적어줘서 사용하는게 좋다. 습관화 하기!
)
VALUES
(
5,
'AAA',
GETDATE(),
1500,
'AAA'
)

INSERT INTO MARKET_CART
--컬럼 안넣고 바로데이터 넣어보기
VALUES
(
1,
10,
5 -- 이건 MARKET_CART의 PRODUCTNO임, 하지만 참조하고있기 때문에 원래 PRODUCT에 PRODUCTNO에 5가있어야함
)

SELECT * FROM PRODUCT
SELECT * FROM MARKET_CART

정상적으로 MARKET_CART가생성됨!

FOREIGN 는 참조하는 칼럼의 값이 있어야만 생성이 된다.

PRODCT의 PRODUCTNO 가 5이고

MARKET_CART의 PRODUCTNO 가 5이기 때문에 생성이 된것이다.

 

ps.테이블삭제

MARKET_CART가 PRODUCT테이블을 참고하고 있기때문에

MARKET_CART먼저 삭제해줘야한다.

DROP TABLE MARKET_CART;
DROP TABLE PRODUCT;

- CHECK

형식: CONSTRAINT 제약명 CHECK(조건)

ex) CHECK(PRICE > 0), CHECK(PRICE>500), CHECK(PRICE=5000), CHECK(PRICE IN(1,2,3,4,5))....

CREATE TABLE PRODUCT
(
	PRODUCTNO INT,
	PRODUCTNAME VARCHAR(10),
	MAKEDAY DATETIME,
	PRICE FLOAT,
	PRODUCTINFO VARCHAR(MAX),
PRIMARY KEY(PRODUCTNO),
CONSTRAINT CHK_PRICE CHECK (PRICE > 0) -- PRICE = 5000이런것도가능, IN (1,2,3)도가능 소괄호 안의 숫자들만 넣을 수 있다.
)

INSERT INTO PRODUCT
(PRODUCTNO,
PRICE
)
VALUES
(
1,-5
)

SELECT * FROM PRODUCT

0보다 작은 숫자를 넣으려고하니 들어가지 않는다.

1,300 Ok

1,-5 No!

 

- UNIQUE

형식: 컬럼명 데이터타입 UNIQUE

UNIQUE로 설정된 해당 컬럼에 중복값을 허용하지 않는다. 하지만 NULL값을 허용한다. (<->PRIMARY KEY)

이와같이 만들고 PRODUCTNO만 바꿔줘도

이와같이 UNIQUE속성으로 인한 오류가 나온다.

UNIQUE 조건을준 PRODUCTNAME을 바꿔주니 정상적으로 들어간다.

또한 이와같이 NULL값도 허용이 된다.

하지만 NULL값역시 중복은 되지않는다. NULL값 역시도 한번만 가능하다!

반응형

'SQL' 카테고리의 다른 글

MSSQL 4. ORDER BY  (0) 2022.08.12
MSSQL 3. Identity, SEQUENCE  (0) 2022.08.11
MSSQL 2.DROP TABLE, ALTER TABLE  (0) 2022.08.04
MSSQL 1.무결성 제약조건 - NULL, PRIMARY KEY  (0) 2022.08.04
MSSQL 0.데이터 타입  (0) 2022.08.03