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' 가능
동시에 만족하는 데이터는 제약조건에 의하여 입력 불가능.
*/