어제 두 개의 컬럼으로 기본키를 부여한 것으로 실습을 해보자.
-- 두 개의 컬럼으로 기본키 부여
CREATE TABLE test5 (
id VARCHAR2(30),
code NUMBER,
pwd VARCHAR2(30) NOT NULL,
name VARCHAR2(30) NOT NULL,
birth DATE,
CONSTRAINT pk_test5_id PRIMARY KEY( id, code )
-- 복합키로 기본키를 구성할 때는 꼭 테이블 레벨로 작성해야함
);
SELECT * FROM USER_CONSTRAINTS WHERE table_name= 'TEST5';
SELECT * FROM USER_CONS_COLUMNS WHERE table_name= 'TEST5';
INSERT INTO test5(id, code, pwd, name) VALUES('a', 1, '1', '1');
SELECT* FROM test5;
INSERT INTO test5(id, code, pwd, name) VALUES('a', 1, '2', '2');
-- 에러 : ORA-00001 기본키 제약 위반
INSERT INTO test5(id, code, pwd, name) VALUES('a', 2, '2', '2');
SELECT* FROM test5;
INSERT INTO test5(id, code, pwd, name) VALUES('b', NULL, '3', '3');
-- 에러 : ORA-01400 기본키는 NULL이 될 수 없다.
-- 기본키는 NOT NULL을 안줘도 NOT NULL
UPDATE test5 set code = 3 WHERE id = 'a' AND code = 2;
-- 이럴때 95퍼 이상 WHERE은 기본키로 준다.
-- 제약 조건을 위반하지 않으면 기본키 수정 가능
SELECT* FROM test5;
기본키가 없는 테이블을 생성해서 생성된 테이블에 기본키를 추가해보자.
CREATE TABLE test6 (
id VARCHAR2(30),
pwd VARCHAR2(30) NOT NULL,
name VARCHAR2(30) NOT NULL
);
SELECT * FROM tab;
INSERT INTO test6(id, pwd, name) VALUES ('1', '1', '1');
INSERT INTO test6(id, pwd, name) VALUES ('1', '2', '2');
SELECT * FROM test6;
SELECT * FROM USER_CONSTRAINTS WHERE table_name= 'TEST6';
SELECT * FROM USER_CONS_COLUMNS WHERE table_name= 'TEST6';
-- 기본키가 없음을 확인할 수 있다.
테이블 생성 및 자료 추가
존재하는 테이블에 기본키 추가
ALTER TABLE test6 ADD CONSTRAINT pk_test6_id PRIMARY KEY ( id );
-- 에러 : ORA-02437. 기본키 위반의 데이터가 존재하므로 추가할 수 없다.
ID를 기본키로 하려고 했으나 이미 들어가 있는 테이블에 ID가 중복적인 것이 존재하므로 기본키 제약조건 위반으로 설정할 수 없다. 따라서 테이블 생성 -> 기본키 추가 -> 테이블에 자료 추가 로 해야함.
여기서는 테이블 생성 -> 테이블에 자료 추가 를 먼저 했기 때문에 자료를 다 삭제하고 기본키를 주어야한다.
-- 모든 데이터 삭제
DELETE FROM test6;
COMMIT;
SELECT* FROM test6;
ALTER TABLE test6 ADD CONSTRAINT pk_test6_id PRIMARY KEY ( id );
-- 다시 기본키 추가
SELECT * FROM USER_CONSTRAINTS WHERE table_name= 'TEST6';
SELECT * FROM USER_CONS_COLUMNS WHERE table_name= 'TEST6';
-- 기본키가 추가되었음을 알 수 있다.
생성된 테이블에 기본키를 추가할 때는 ALTER TABLE 테이블명 ADD [ CONSTRAINT 제약조건명] PRIMARY KEY(기본키 설정하고 싶은 컬럼명); 으로 준다.
기본키 제약 조건을 삭제하려면 ?
ALTER TABLE test6 DROP PRIMARY KEY;
SELECT * FROM USER_CONSTRAINTS WHERE table_name= 'TEST6';
SELECT * FROM USER_CONS_COLUMNS WHERE table_name= 'TEST6';
-- 지워졌음을 알 수 있다.
ALTER TABLE 테이블명 DROP PRIMARY KEY; 로 삭제할 수 있다.
'쌍용강북교육센터 > 8월' 카테고리의 다른 글
0811_Oracle : DEFAULT와 CHECK 제약조건 (1) | 2021.08.11 |
---|---|
0811_Oracle : UNIQUE 제약조건과 NOT NULL 제약조건 (1) | 2021.08.11 |
0810_Oracle : 기본키 PRIMARY KEY와 제약조건 (1) | 2021.08.11 |
0810_Oracle : MERGE 를 통해 병합하기 (1) | 2021.08.11 |
0810_Oracle : DELETE 와 TRUNCATE, 실수로 자료를 삭제했을 때 복구 방법 (4) | 2021.08.11 |