제약조건은 컬럼에 대한 속성을 정의하는것이고, 테이블의 부적절한 데이터가 입력되는 것을 방지하기 위해 정의한 규칙이다. 데이터의 무결성을 보호하기 위해 사용한다. 제약조건은 데이터베이스의 객체로 고유의 이름을 지정해주어야 한다. 따로 지정하지 않으면 시스템에서 자동으로 이름을 지정해준다. 제약조건에 대해 오류가 났을때 제약조건에 이름이 오류내용에 출력되는데 오라클에서 자동으로 지정해준 이름이기때문에 코드번호로 적혀있어 외우고 있지 않은 이상 알 수가 없다. 사용자가 특정한 이름을 지정해준다면 오류가 발생한 제약조건에 대해 더 빨리 찾을 수 있을 것이다. 제약조건 이름 지정하기
이미 만든 제약조건을 삭제할 수 있고 이미 만들어진 컬럼에 제약조건을 추가할 수도 있다. 하지만 CHECK와 같은 경우도 있으니 모두 되는것은 아니다. 제약조건 삭제
제약조건 추가
PRIMARY KEY기본키라고도 부른다. PRIMARY KEY를 제약조건으로 가진 컬럼은 같은 데이터 중복불가와 NULL값을 허용하지 않는다. 즉 UNIQUE + NOT NULL이 합쳐진 제약조건인 셈이다. 테이블 당 1개만 생성할 수 있고, 여러 컬럼을 묶어서 하나의 기본키로 만드는 것도 가능하다.
UNIQUE중복값을 허용하지 않는 제약조건이다. NOT NULL과도 함께 쓸 수 있다.
NOT NULLNOT NULL을 가진 컬럼은 반드시 데이터가 들어와야한다. 즉 NULL값을 허용하지 않는다.
FOREIGN KEY외래키라고 부르는 제약조건이다. 참조키, 외부키, 외래키 여러가지 이름으로 부를 수 있는데 다른 테이블의 컬럼을 참조하는 기능을 하고 있다. 외래키가 정의된 테이블을 자식 테이블이라고 부른다. 참조하는 테이블의 컬럼과 외래키를 가지고 있는 컬럼의 데이터타입이 반드시 일치해야한다. 중복값을 허용하지 않는 유일한 데이터를 가진 컬럼 즉 PRIMARY KEY나 UNIQUE를 가진 컬럼에만 참조가 가능하다.
외래키로 참조하고 있을 경우 참조를 당하는 부모 테이블의 컬럼의 값은 삭제할 수가 없다. 삭제하고 싶다면 외래키를 전부 삭제를 한다음에는 삭제를 할 수가 있는데 굉장히 번거롭다. 외래키를 가진 테이블에 따로 속성을 주면 부모 테이블과 자식테이블의 값도 삭제할 수 있다.
CHECK조건에 맞는지 안맞는지 체크를 해주는 제약조건입니다. 조건과 맞지 않는다면 오류를 발생시킵니다. 즉 입력할수 있는 값의 범위를 제한할 수 있습니다. NOT NULL처럼 이미 조건에 맞지 않는 데이터가 있는 컬럼에 적용하려하면 오류가 발생합니다.
DEFUALT테이블에 데이터를 추가할때 컬럼에 데이터를 넣지 않는다면 따로 무언가를 해주지 않았다면 NULL값이 들어간다. 그 이유는 DEFUALT의 값이 NULL로 설정되어 있기때문이다. 즉 기본값을 설정해줄 수 있는 제약 조건이다. 오라클 데이터베이스에서 제약조건의 종류로는 - PRIMARY KEY - FOREIGN KEY - NOT NULL - CHECK - DEFAULT - UNIQUE 이렇게 여섯가지가 있습니다. 제약조건 마다 모두 기능이 다른데 자주 사용되는 문법으로는 PRIMARY KEY와 FOREIGN KEY 등이 있습니다. 다른 기능도 다양하게 사용되지만 조인을 쓰고 있는 테이블에서는 거의 필수로 사용되고 있습니다. 각 기능의 대해 생성법을 작성하겠습니다. *PRIMARY KEY 지정법 ALTER TABLE 테이블명 ADD CONSTRAINT PK명 PRIMARY KEY(컬럼명,...); - PK명은 COLUMN_PK 이런식으로 정해서 기입하시면 됩니다. - 컬럼여러개를 PK로 지정가능합니다. *FOREIGN KEY 지정법 ALTER TABLE 테이블명 ADD CONSTRAINT FK명 FOREIGN KEY(컬럼명) REFERENCES 참조테이블명(참조테이블의PK컬럼); - FK키를 지정할 테이블,컬럼 그리고 기준이되는 참조테이블명과 PK되어있는 컬럼명을 입력하여야 합니다 *UNIQUE 지정법 ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명UNIQUE(칼럼명); *NOT NULL 지정법 ALTER TABLE 테이블명 MODIFY 컬럼명 NOT NULL; *DEFAULT 지정법 ALTER TABLE 테이블명 MODIFY 컬럼명 DEFAULT 1; - 1로 기본값이 들어간다 *CHECK 지정법 ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 CHECK(범위) EX) 범위 예시 -> (컬럼명 > 0 AND 컬럼명 < 10) 0부터 10까지만 인서트 가능 *제약조건 삭제법 ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명; |