CHECK constraints
CREATE TABLE products(
product_no integer,
name text,
price numeric CHECK (price > 0));
select * from products
insert into products(product_no , name , price) values (10 , 'SinRamen' , 650);
insert into products(product_no , name , price) values (10 , 'ZinRamen' , 0);
1.테스트 하기위해 먼저 products 테이블을 생성합니다.
2.select * from products로 테이블이 잘 만들어졌는지 확인 합니다.
3.insert 로 데이터를 넣어보는대 SinRamen은 조건이맞기에 데이터가 잘들어갑니다.
4.하지만 ZinRamen은 제약조건이 위배 되기 때문에 데이터가 들어가지 않습니다.
CHECK는 특정 boolean 값에 조건이 맞는지 아닌지를 체크합니다.
NOT NULL
CREATE TABLE products(
product_no integer NOT NULL,
name text NOT NULL,
price numeric);
select * from products
insert into products(product_no , name , price) values (10 , 'SinRamen' , 650);
insert into products(price) values (0);
1.테스트 하기위해 먼저 products 테이블을 생성합니다.
2.select * from products로 테이블이 잘 만들어졌는지 확인 합니다.
3.insert 로 데이터를 넣어보는대 SinRamen은 조건이맞기에 데이터가 잘들어갑니다.
4.하지만 ZinRamen은 제약조건이 위배 되기 때문에 데이터가 들어가지 않습니다.
( price에다가 0을 넣어주지만 product_no , name에 값이 아무것도 들어가지않아 위배됨. )
NOT NULL 을 적어주게 된다면 해당 컬럼은 NULL이 들어갈 수 없게 됩니다.
UNIQUE
CREATE TABLE products(
product_no integer UNIQUE,
name text,
price numeric);
select * from products
insert into products(product_no , name , price) values (10 , 'SinRamen' , 650);
insert into products(product_no , name , price) values (10 , 'ZinRamen' , 250);
1.테스트 하기위해 먼저 products 테이블을 생성합니다.
2.select * from products로 테이블이 잘 만들어졌는지 확인 합니다.
3.여기서 insert를 할때 SinRamen은 product_no가 10이다. 하지만 두번째 ZinRamen 또한 10 이기때문에
제약조건에 위배된다.
UNIQUE 를 적어주게 된다면 해당 컬럼은의 데이터는 유일값이 된다. (중복될수없다는 뜻 이다.)
PRIMARY KEY
CREATE TABLE products(
product_no integer PRIMARY KEY,
name text,
price numeric);
select * from products
insert into products(product_no , name , price) values (10 , 'SinRamen' , 650);
insert into products(product_no , name , price) values (20 , 'ZinRamen' , 250);
insert into products(product_no , name , price) values (20 , 'FireRamen' , 450);
1.테스트 하기위해 먼저 products 테이블을 생성합니다.
2.select * from products로 테이블이 잘 만들어졌는지 확인 합니다.
3.insert 에서 PRIMARY KEY가 10 , 20 들어가다가 20이 한번 더 들어가면 위배가 된다.
PRIMARY KEY는 UNIQUE + NOT NULL 제약조건이 합친 것이다.
유익할 식별자이며 NULL아닌 것을 PRIMARY KEY 제약조건이라고 한다,.
FOREIGN KEY
CREATE TABLE TEST_ORG(
org_id integer not null primary key,
org_name varchar(100)
)
insert into TEST_ORG (org_id, org_name) values (1,'개발부');
insert into TEST_ORG (org_id, org_name) values (2,'운영부');
insert into TEST_ORG (org_id, org_name) values (3,'총무부');
SELECT * FROM TEST_ORG;
CREATE TABLE TEST_USER
(
USER_ID varchar(30) not null,
FK_ORG_ID integer not null,
CONSTRAINT test_user_pk1 PRIMARY KEY (USER_ID),
CONSTRAINT test_user_fk1 FOREIGN KEY (FK_ORG_ID) REFERENCES test_org (ORG_ID)
MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION
-- 상단구분은 기본적으로 선언하지 않으면 NO ACTION을 따라간다.
);
insert into TEST_USER (user_id, fk_org_id) values ('admin',1);
insert into TEST_USER (user_id, fk_org_id) values ('bana1',1);
insert into TEST_USER (user_id, fk_org_id) values ('dapa9',2);
insert into TEST_USER (user_id, fk_org_id) values ('dapa9',4);
SELECT * FROM TEST_USER
1.TEST_ORG테이블 생성 (CREATE)
2.TEST_ORG에 데이터를 넣어준다. (INSERT)
3.TEST_ORG테이블이 잘 만들어졌고 데이터가 정상적으로 들어갔는지 확인한다. (SELECT)
4.TEST_USER테이블을 생성해준다. (CREATE)
5.제약조건을 걸어준다 test_user_pk1이름으로 그리고 PRIMARY KEY (기본키형식으로) 컬럼값 USER_ID를
6.제약조건을 걸어준다 test_user_fk1이름으로 그리고 FOREIGN KEY (외래키형식으로) 컬럼값 PK_ORG_ID를
REFERENCES 참조한다 TEST_ORG에있는 테이블에 컬럼 ORG_ID를
7.데이터를 넣어주는대 마지막에 dapg9 , 4는 위배된다 4라는 데이터는 없기 때문이다.
ON UPDATE NO ACTION
현재 테이블의 외래키 fk_org_id 에서 참조하는 다른테이블의 키를 업데이트 할려고 할 때 오류를 발생시키고 UPDATE가 roolback되도록 지정하는 기능이다.
ON DELETE NO ACTION
현재 테이블의 외래키인 TEST_ORG 테이블의 ORG_ID키를 삭제하려 할때 오류를 발생시키고 DELETE가 roolback 되도록 지정하는 기능이다.
쉽게 말해 테이블끼리 연관관계를 맺는다고 생각하면 쉽다
ORG_ID에 1 , 2 , 3으로 FK_ORG_ID를 맺음으로써 PK_ORG_ID에는 1,2,3 말고 다른 값은 허용 하지않는 것 이다.
'DATABASE > POSTGRE' 카테고리의 다른 글
Postgresql 개발 환경 구축하기[ Windows 10 ]_2 (0) | 2021.09.23 |
---|---|
Postgresql 특징 및 소개_1 (0) | 2021.09.23 |