무병이
무병이개발일기
무병이
전체 방문자
오늘
어제
  • 모든 (17)
    • DATABASE (15)
      • MYSQL (0)
      • ORACLE (11)
      • POSTGRE (3)
    • Study (0)
      • 게시판 만들기 (0)
    • back-end (Web) (1)
      • Spring-Project (sts3) 셋팅 (0)
      • 정리 (1)
    • 프로젝트 (0)
      • 도서관리프로그램 (0)

티스토리

hELLO · Designed By 정상우.
무병이

무병이개발일기

PostgreSQL - 제약조건
DATABASE/POSTGRE

PostgreSQL - 제약조건

2021. 9. 10. 11:09

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
    'DATABASE/POSTGRE' 카테고리의 다른 글
    • Postgresql 개발 환경 구축하기[ Windows 10 ]_2
    • Postgresql 특징 및 소개_1
    무병이
    무병이
    안농~!

    티스토리툴바