[오라클 / Oracle] 제약조건 / CONSTRAINT / PK / FK / UK / CHECK / DEFAULT / NOT NULL

seulki·2022년 9월 10일
0

[oracle]

목록 보기
5/28
post-thumbnail
post-custom-banner

✨제약조건 CONSTRAINT 이란?

  • 오라클에서 사용하는 제약조건은 테이블의 특정 컬럼에 지정한다.
  • 제약 조건을 지정한 컬럼에 조건에 부합하지 않는 데이터를
    저장할 수 없다.
  • 제약 조건 지정 방식에 따라 기존 데이터의 수정이나 삭제 가능 여부도
    영향을 받는다.

👍 NOT NULL

  • 지정한 컬럼에 NULL을 허용하지 않는다.
       -- CONSTRAINT 미사용시 이름 지정 불가
       CREATE TABLE NULL_test(
    		col1 varchar2(20) NOT NULL
    	,	col2 varchar2(20) null
    	, 	col3 varchar2(20)
        ,
    	);
-- CONSTRAINT 사용시 이름 지정 가능
CREATE TABLE TABLE_NOUNULL2(
	LOGIN_ID VARCHAR2(20) CONSTRAINT TBLNN2_LOGIN_ID NOT NULL,
    LOGIN_PWD VARCHAR2(20) CONSTRAINT TBLNN2_LOGIN_PWD NOT NULL
);
-- 테이블 생성 후 NOT NULL 제약조건 추가
-- 데이터에 NULL값이 없어야 성공
ALTER TABLE TABLE_NOTNULL MODIFY(TEL TBLNN_TEL_NN NOT NULL);

👍 UNIQUE

  • 지정한 컬럼이 유일한 값을 가져야 한다. 중복이 불가하다.
    단, NULL은 값의 중복에서 제외
      CREATE TABLE unique_test(
    		col1	varchar2(20) UNIQUE NOT NULL
    	,	col2	varchar2(20) UNIQUE
    	,	col3	varchar2(20) NOT NULL
    	,	col4	varchar2(20) NOT NULL
    	,	CONSTRAINT temp_unique UNIQUE (col3, col4)
    );
  CREATE TABLE UNIQUE_TEST2(
		col1 varchar2(20)
	,	col2 varchar2(20)
	,	CONSTRAINT temp_unique2 unique(col1, col2) 
    --두개를 묶어서 제약조건을 주면 두 개 조합이 모두 총죽해야한다.
); 		

👍 PRIMARY KEY

  • 지정한 컬럼이 유일한 값이면서 NULL을 허용하지 않는다.
  • 중복이 불가하고 테이블에 하나만 지정 가능하다.
    --인라인
    CREATE TABLE primary_test(
    	sstudent_id  number(10) PRIMARY KEY,
    	name			varchar2(20)
    );
CREATE TABLE TABLE_NAME(
	 COL1 VARCHAR2(20) CONSTRAINT CONSTRAINT_NAME PRIMARY KEY
   , COL2 VARCHAR2(20) NOT NULL
   );
--아웃라인
CREATE TABLE PRIMARY_TEST2(
	student_id number(10),
	name		varchar2(20),
	CONSTRAINT student_pk PRIMARY KEY (student_id)
);
CREATE TABLE ACCOUNT(
	ACCOUNT_NUM NUMBER,
	ACCOUNT_BANK VARCHAR2(200),
	ACCOUNT_NAME VARCHAR2(100),
	ACCOUNT_CVC NUMBER,
	CONSTRAINT ACCOUNT_PK PRIMARY KEY(ACCOUNT_NUM, ACCOUNT_BANK)
);
-- 테이블 생성 후 PK 생성
ALTER TABLE PRIMARY_TEST3 
ADD CONSTRAINT student_pk2 PRIMARY KEY (student_id);

👍 FOREIGN KEY

  • 다른 테이블의 컬럼을 참조하여 PK에 존재하는 값만 입력 가능하다.
CREATE TABLE FOREIGN_KEY(
department_id constraint dept_fk REFERENCES departments(department_id)
);
CREATE TABLE DOUGHTER(
	IDX NUMBER(10) PRIMARY KEY,
	MID NUMBER(10),
	CONSTRAINT FK_DA FOREIGN KEY(MID) REFERENCES DADDY(MID) ON DELETE CASCADE
);
-- 테이블을 생성 한 후 FK 생성
ALTER TABLE ORDER_INFO 
ADD CONSTRAINT ODER_FK FOREIGN KEY (PRODUCT_NUM) REFERENCES PRODUCT(PRODUCT_NUM);
-- 테이블을 생성 한 후 FK 삭제
ALTER TABLE ORDER_INFO DROP CONSTRAINT ODER_FK; 

👍 CHECK

  • 설정한 조건식을 만족하는 데이터만 입력 가능하다.
CREATE TABLE check_test(
	gender varchar2(10) NOT NULL ,
	CONSTRAINT check_gender check(gender IN('M', 'F'))
);
CREATE TABLE TBL_STUDENT(
		ID NUMBER
	,	NAME VARCHAR2(100)
	,	MAJOR VARCHAR2(100)
	,	GENDER CHAR(1) DEFAULT 'W' NOT NULL CONSTRAINT BAN_CHAR CHECK (GENDER IN ('M', 'W'))
	     -- DEFAULT 는 아무값도 넣지않을경우 기본값으로 넣어라 / CHECK는 'M'과 'W' 값이 아니라면 오류발생 시킨다.
	, 	BIRTH DATE CONSTRAINT BAN_DATE CHECK (BIRTH >= TO_DATE ('1980-01-01', 'YYYY-MM-DD'))
	,	CONSTRAINT STD_PK PRIMARY KEY (ID)
);


profile
웹 개발자 공부 중
post-custom-banner

0개의 댓글