## STATUS 제약조건 ##
1 : 다 관계의 테이블에서는 부모테이블에 존재하는 행은
Foreign Key 로 인해서 삭제가 불가하다.
(단,on delete cascade 옵션을 사용하지 않을 때)
update 로 그 효과를 (delete 하는 효과) 가지도록 한다.
즉, 특정 컬럼을 하나 생성해서 사용중인 행인지,
사용하지 않은 행인지 구분을 하도록 한다.
<< 테이블 생성 >>
CREATE TABLE TBL_PRODUCT2
(PDCODE VARCHAR2(10)
,PDNAME VARCHAR2(10)
,DANGA NUMBER
,STATUS NUMBER(1) DEFAULT 1 -- 1: 사용중 , 0: 사용불가
,CONSTRAINT TBL_PRODUCT2_PDCODE_PK
PRIMARY KEY(PDCODE)
,CONSTRAINT TBL_PRODUCT2_STATUS_CK
CHECK( STATUS IN (0,1) )
--STATUS = 0 OR STATUS = 1)
);
<< 테이블 생성 >>
CREATE TABLE TBL_PANMAE2
(PDCODE VARCHAR2(10)
,PANDAY DATE DEFAULT SYSDATE
,PANSU NUMBER
,CONSTRAINT TBL_PANMAE2_PDCODE_FK
FOREIGN KEY(PDCODE)
REFERENCES TBL_PRODUCT2(PDCODE)
);
--삭제시 삭제불가
DROP TABLE TBL_PRODUCT2;
=>ORA-02449: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있습니다
--삭제시 삭제가능
DROP TABLE TBL_PANMAE2;
*************************************************************
*************************************************************
INSERT INTO TBL_PRODUCT2(PDCODE,PDNAME,DANGA)
VALUES ('SWK', '새우깡', 1000);
INSERT INTO TBL_PRODUCT2(PDCODE,PDNAME,DANGA)
VALUES ('KJK', '감자깡', 1500);
INSERT INTO TBL_PRODUCT2(PDCODE,PDNAME,DANGA)
VALUES ('YPR', '양파링', 2000);
COMMIT;
INSERT INTO TBL_PANMAE2(PDCODE,PANSU)
VALUES('SWK', 20);
INSERT INTO TBL_PANMAE2(PDCODE,PANSU)
VALUES('KJK', 30);
INSERT INTO TBL_PANMAE2(PDCODE,PANSU)
VALUES('SWK', 50);
INSERT INTO TBL_PANMAE2(PDCODE,PANSU)
VALUES('SWK', 10);
INSERT INTO TBL_PANMAE2(PDCODE,PANSU)
VALUES('BBR', 15);
-- ORA-02291: 무결성 제약조건(NEWSCOTT.TBL_PANMAE2_PDCODE_FK)이
위배되었습니다- 부모 키가 없습니다
COMMIT;
--조회
SELECT *
FROM TBL_PRODUCT2
WHERE STATUS = 1;
SELECT *
FROM TBL_PANMAE2;
SELECT *
FROM TBL_PANMAE2
WHERE PDCODE IN
-- 제품테이블에서 취금하는 품목만 제품코드를 보고자 한다.
(SELECT PDCODE
FORM TBL_PRODUCT2
WHERE STATUS = 1)
--업데이트 (사용중인 제품만 업데이트를 이용하면 구지 지우지 않아도 된다.)
UPDATE TBL_PRODUCT2 SET STATUS = 1
WHERE PDCODE = 'SWK';
COMMIT;
'IT. 컴퓨터' 카테고리의 다른 글
[오라클] 괄호, AND, OR, NOT, =, !=,(^=, <>) 연산 (0) | 2020.04.22 |
---|---|
제품 테이블, 판매 테이블 생성 및 백업 (1) | 2020.04.21 |
테이블명, 제약조건, 컬럼명 변경하기 (0) | 2020.04.19 |
[오라클] 부모 컬럼 지우면 자식 컬럼 지워짐 (0) | 2020.04.17 |
[오라클] triggger로 패스워드 바꾸기 (0) | 2020.04.17 |