개발관련/DB관련

ORACLE 10g 컬럼레벨 기본키/제약조건 확인/제약 조건 이름 부여 등

길동무92 2010. 7. 16. 11:32

--컬럼레벨 기본키
CREATE TABLE TEST1 (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(20),
    tel VARCHAR2(25)
    );

--제약조건 확인(폴린키를 지우기 위해서 알아야한다.)
DESC user_constraints;

SELECT constraint_name,table_name,
   r_constraint_name,constraint_type
            FROM user_constraints;

 

--제약 조건 이름 부여           
CREATE TABLE test2(
  id NUMBER CONSTRAINT pk_test2_id PRIMARY KEY,
  name VARCHAR2(20),
  tel VARCHAR2(25)
  );
 
SELECT constraint_name,table_name,
   r_constraint_name,constraint_type
            FROM user_constraints;

 

--테이블 레벨 기본키
CREATE TABLE test3(
  id NUMBER,
  code VARCHAR2(4),
  name VARCHAR2(20),
  CONSTRAINT pk_test3_id PRIMARY KEY(id)--테이블 제약 조건 따로 뺴낸다.
  );
 
 CREATE TABLE test4(
  id NUMBER(4),
  code VARCHAR2(4),
  name VARCHAR2(20),
  CONSTRAINT pk_test4_id PRIMARY KEY(id,code)--테이블 기본키 2개 준다 (즉, 복합키)
  );
 
SELECT constraint_name,table_name,
   r_constraint_name,constraint_type
            FROM user_constraints;

 

--자료 입력
INSERT INTO test4(id,code,name) VALUES (1,'1111','A');
INSERT INTO test4(id,code,name) VALUES (1,'2222','B');
INSERT INTO test4(id,code,name) VALUES (1,'2222','C');
//오류 : 제약 조건 위반
INSERT INTO test4(id,code,name) VALUES (1,NULL,'C');
//오류 : 기본키는 NULL이 될 수 없다.

COMMIT;
SELECT * FROM test4;

 

--기본키 삭제
ALTER TABLE test4 DROP PRIMARY KEY;

SELECT constraint_name,table_name,
   r_constraint_name,constraint_type
            FROM user_constraints WHERE table_name='TEST4'; --조건은 대문자자비교(데이블명)
            
// 이미 존재하는 테이블에 기촌키 추가

ALTER TABLE test4 ADD CONSTRAINT pk_test4_id PRIMARY KEY(id);
//오류 : test4 테이블의 id에 유일성에 위반하는 데이터가 있으므로 (값이 같기떄문에)
ALTER TABLE test4 ADD CONSTRAINT pk_test4_id PRIMARY KEY(id,code);


--UNIQUE
CREATE TABLE test5(
  id NUMBER NOT NULL,
  ssn VARCHAR2(14),
  tel VARCHAR2(20),
  CONSTRAINT pk_test5_id PRIMARY KEY (id), --기본키는 한개
  CONSTRAINT uk_test5_ssn UNIQUE (ssn) -- 하지만 유니크는 제한이 없다.
  );

INSERT INTO test5(id) VALUES(1);
  // ssn이 NOT NULL 이 아니므로 NULL 허용
INSERT INTO test5(id) VALUES(2);
  //UNIQUE에서 NULL은 중복 허용
INSERT INTO test5(id,ssn) VALUES(3,'1');
INSERT INTO test5(id,ssn) VALUES(4,'1');
//오류 : ssn이 중복적인 데이터이므로