-- 기본키 PRIMARY KEY
테이블의 유일성을 보장하기 위한 제약조건
하나의 테이블에는 하나의 기본키만 가질 수 있다.
방법1. 컬럼레벨로 기본키 지정
-- 하나의 컬럼을 이용하여 간단하게 기본키를 지정한다.
CREATE TABLE 테이블명(
컬럼명 타입 [CONSTRAINT 제약조건이름] PRIMARY KEY
:
);
방법2. 테이블레벨로 기본키지정(이건 기억해놔야한다)
-- 하나이상의 컬럼을 이용하여 기본키를 지정 할 수 있다.
CREATE TABLE 테이블명(
컬럼명 타입
:
, CONSTRAINT 제약조건이름 PRIMARY KEY (컬럼명,[컬럼명]))
);
--제약조건 이름은 제약조건을 삭제하거나 변경할 때 이용된다.
--제약조건 이름은 다른 제약조건, 개체와도 중복 될 수 없다.
===================================================================================================
제약조건에 이름을 붙이는 이유 :
컬럼의 제약조건에 따라서 데이터를 입력할 수 있는 조건이 달라진다.
이에 따라서 어떤 컬럼이 어떤 제약조건인지 확인해야한다.
그런데 제약조건이름을 붙이지 않고서는 어떤 제약조건이 붙어있는지 확인할 수 없기 때문이다.
바로 아래에 제약조건 확인하는 쿼리가 있다.
이름을 붙이지 않으면 오라클이 임의의 이름을 붙이는데 이것으로는 어떤제약조건인지 알 수가 없다.
--제약조건 확인( 제약조건은 보이지만 어떤 칼럼인지는 모른다)
SELECT * FROM USER_CONSTRAINTS;
SELECT * FROM USER_CONSTRAINTS WHERE table_name='TEST1(테이블이름)';
(테이블이름은 대문자여야한다.)
-- 여기서 constrain_type 컬럼의 알파벳에 따라 어떤 제약조건인지 알 수 있다.
-- P: 기본키, U:UNIQUE, R:참조키, C:NOT NULL 등
--제약조건이 어떤 칼럼에 있는지 확인(어떤 제약조건인지는 확인 불가능)
SELECT * FROM USER_CONS_COLUMNS;
===================================================================================================
-- 두 개의 컬럼으로 하나의 기본키 저장하는 예
CREATE TABLE test4(
hak NUMBER
,num NUMBER
,name VARCHAR2(20) NOT NULL
,birth DATE
, CONSTRAINT pk_test4_num primary key(hak,num)
);
SELECT * FROM USER_CONSTRAINTS WHERE table_name='TEST4';
SELECT * FROM USER_CONS_COLUMNS WHERE table_name='TEST4';
INSERT INTO test4(hak, num, name) VALUES (1,1,'aaa'); -- 데이타를 입력함
INSERT INTO test4(hak, num, name) VALUES (1,2,'bbb');
INSERT INTO test4(hak, num, name) VALUES (2,1,'ccc');
INSERT INTO test4(hak, num, name) VALUES (2,2,'ddd');
COMMIT;
=> hak,num으로 하나의 기본키를 만들었다. 따라서 2개의 컬럼의 데이타가 똑같을때 무결성 오류로 입력불가능.
hakt,num의 데이타 중 하나만 다르다면 입력이 가능한 것이다.
INSERT INTO test4(hak, num, name) VALUES (1,2,'aaa'); --에러 : 기본키 제약 오류(중복허용안됨)
SELECT * FROM test4;
INSERT INO test4(hak, num, name) VALUES (5,null,'eee'); -- 에러 : 기본키는 null이 될 수 없다.
-- 기본키는 not null이 없어도 not null, 꼭 데이타를 입력해야만 한다
----------------------------------------------------------------------------
--존재하는 테이블에 기본키 부여
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건이름 PRIMARY KEY (컬럼 [,컬럼]);
ALTER TABLE test4 ADD CONSTRAINT pk_test4_num PRIMARY KEY( hak,num);
--오류 : 기본키 제약 조건에 위배되는 자료가 있으므로 불가능(데이타가 이미있기 때문에 오류가 생기는 것이 아니다)
DELETE FROM test4 WHERE hak=5; --위배되는 자료 삭제
COMMIT;
ALTER TABLE test4 ADD CONSTRAINT pk_test4_num PRIMARY KEY( hak,num);
SELECT * FROM USER_CONSTRAINTS WHERE table_name='TEST4';
--프리머리 키가 생겨있다.
---------------------------------------------------------------------------
--기본키 제거
ALTER TABLE 테이블명 DROP PRIMARY KEY;
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건이름; -- 다른 제약조건도 삭제가능
ALTER TABLE test4 DROP PRIMARY KEY;
SELECT * FROM USER_CONSTRAINTS WHERE table_name='TEST4';
-- CONSTRAINT_TYPE이 P에서 C로 바뀌었음
INSERT INTO test4(hak,num,name) values(5,null,'eee');
--null이 기본키가 아니므로 가능
----------------------------------------------------------------------------
'오라클 > 제약조건' 카테고리의 다른 글
참조키(외래키, FORIGN KEY) (0) | 2013.06.11 |
---|---|
제약조건 DEFAULT 디폴트 (0) | 2013.06.01 |
제약조건 NOT NULL (0) | 2013.06.01 |
제약조건 CHECK (0) | 2013.06.01 |
제약조건 UNIQUE 유니크 (0) | 2013.06.01 |