SQL 10. 제약 조건 포함
관련링크
본문
테이블의 정의 할때 특별한 조건을 걸어 만들 수 있으며
만약 제약조건에 맞지 않을때 데이타가 입력및 수정등이 안되며
이를 제약조건 위반 하였다 라고 한다.
․ 제약 조건은 테이블 레벨(테이블자체에) 로 규칙을 적용한다.
․ 제약 조건은 종속된 테이블의 삭제를 방지한다.
․ 다음은 유효한 제약 조건 유형입니다.
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
SQL Server는 제약조건을 사용하여 테이블에 유효하지 않은 데이터가 입력되는 것을 방지한다.
제약 조건을 사용하여 다음을 수행할 수 있다. ․
해당 테이블에서 행이 삽입, 갱신 또는 삭제될 때마다 테이블의 데이터에 규칙을 적용한다. ․
다른 테이블에 종속된 테이블의 삭제를 방지한다.
데이터 무결성 제약 조건
NOT NULL 열이 널 값을 포함하지 못하도록 지정합니다.
UNIQUE 테이블의 모든 행(row)에서 고유한 값을 갖는 열 또는 열조합을 지정합니다.
PRIMARY KEY 테이블의 각 행을 고유하게 식별합니다.
FOREIGN KEY 한 열과 참조된 테이블의 열 간에 외래 키 관계를 설정하고 시행합니다.
CHECK 참(trun)이어야 하는 조건을 지정합니다.
제약 조건 지침
제약 조건에 이름을 지정하지 않으면 Oracle server는 SYS_Cn형식의 이름을 생성하고. n은 제약 조건 이름을 고유하게
만들어 주는 정수이며 MSSQL server는 FK_, PK_, DF_, CK_와 같은 이름을 생성시킨다.
․ 제약 조건 생성 시기
- 테이블이 생성될 때
- 테이블이 생성된 후에 정의할 수 있다.
․ 열 레벨 또는 테이블 레벨로 제약 조건을 정의한다.
․ 데이터 딕셔너리(시스템 테이블)에 저장되므로 데이터 딕셔너리(시스템 테이블)에서 제약 조건을 볼 수 있다.
제약 조건 이름은 표준 객체 이름 지정 규칙을 따라야 하며 제약 조건에 의미 있는 이름을 지정하면 참조하기가 쉬워진다.
Oracle server는 USER_CONSTRAINTS데이터 딕셔너리 테이블을 통해 특정 테이블에 정의된 제약 조건을 볼 수 있다.
제약 조건 정의
컬럼(열)(속성) 레벨
CREATE TABLE [scheme.] table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint] [,...]);
테이블 레벨
CREATE TABLE employees(
employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10) NOT NULL,
CONSTRAINT emp_em_id_pk
PRIMARY KEY (EMPLOYEE_ID));
schema 소유자 이름과 동일하다.
table 테이블 이름이다.
DEFAULT expr INSERT문에 값이 생략된 경우 사용할 기본값을 지정한다.
column 열 이름이다.
datatpe 열의 데이터 유형 및 길이다.
column_constraint 열 정의의 일부인 무결성 제약 조건이다.
table_constraing 테이블 정의의 을부인 무결정 제약 조건이다.
constraint_name 제약 조건 이름입니다.
constraint_type 제약 조건 유형입니다.
MSSQL 디비 예제 :
CREATE TABLE employee
(
...
fname varchar(20) NOT NULL,
minit char(1) NULL,
lname varchar(30) NOT NULL,
job_id smallint NOT NULL
DEFAULT 1
REFERENCES jobs(job_id),
...
)
제약 조건 레벨 설명
컬럼(열)
단일 열을 참조하며 해당 제약 조건을 소유하는 열의 명세부분에서 정의된다.
모든 무결성 제약 유형을 정의할 수 있다.
column [(CONSTRAINT constraint_name] constraint_type,
테이블
하나 이상의 열을 참조하며 테이블의 열 정의와는 별도로 정의된다.
NOT NULL을 제외한 모든 제약 조건을 정의할 수 있다.
column, ..., ,
[CONSTRAINT constraint_name] constraint_type (column, ...),