Data base
기본키(Primary key)
연93
2022. 10. 14. 14:44
/*
기본키는 UNIQUE와 NOT NULL 속성을 동시에 가진 제약조건으로, 테이블 당 1개의 기본키만 생성할 수 있다.
컬럼명 데이터타입 PRIMARY KEY
혹은
CONSTRAINTS 제약조건명 PRIMARY KEY(컬럼명, ...) // 테이블수준제약
*/
-- 기본키
CREATE TABLE ex2_8 (
COL1 VARCHAR2(10) PRIMARY KEY, -- UNIQUE + NOT NULL 포함 // 제약객체이름이 내부적으로 자동생성
COL2 VARCHAR2(10) -- NULL 생략
);
-- 테이블 제약조건 정보 조회
SELECT constraint_name, constraint_type, table_name, search_condition
FROM user_constraints
WHERE table_name = 'EX2_8';
--테이터 입력
INSERT INTO ex2_8 VALUES ('', 'AA'); --ORA-01400: cannot insert NULL into ("ORA_USER"."EX2_8"."COL1")
INSERT INTO ex2_8 VALUES ('AA', 'AA'); --성공
INSERT INTO ex2_8 VALUES ('AA', 'AA'); --동일 테이터 에러 ORA-00001: unique constraint (ORA_USER.SYS_C007178) violated
--테이터 확인
SELECT * FROM ex2_8;
/*
단일키 : 컬럼1개를 지정.
복합키 : 컬럼 여러개를 지정. (테이블 수준제약)
*/
--테이블은 PRIMARY KEY를 단 1개만 생성할수가 있다.
--아래 구문은 에러가 발생. 2개를 생성하고자 하는 의미
CREATE TABLE TEST_01 (
COL1 NUMBER PRIMARY KEY,
COL2 VARCHAR2(10) PRIMARY KEY
);
/* 오류메세지
02260. 00000 - "table can have only one primary key"
*Cause: Self-evident.
*Action: Remove the extra primary key.
*/
--테이블에 복합키 PRIMARY KEY생성
CREATE TABLE TEST_01 (
COL1 NUMBER,
COL2 VARCHAR2(10),
PRIMARY KEY(COL1, COL2)
);
--제약조건 이름을 주고싶을때 복합키
CREATE TABLE TEST_01 (
COL1 NUMBER,
COL2 VARCHAR2(10),
CONSTRAINTS PK_TEST_01 PRIMARY KEY(COL1, COL2) --PK이름을 지정함
);
-- 데이터 삽입
INSERT INTO TEST_01 VALUES(1, 'AA'); --NUMBER형 첫번째, VARCHAR형 두번째
/*
1. 'AA'
1. 'BB'
2. 'AA' 가능
동시에 만족하는 데이터는 제약조건에 의하여 입력 불가능.
*/