MySQL 제약 조건
제약조건(constraint)이란?
데이터의 무결성을 위해 데이터 입력을 받을 때 실행하는 검사 규칙을 의미함.
제약 조건은 'CREATE' 문으로 테이블을 생성하거나 'ALTER'문으로 필드 추가시에도 사용 가능.
제약 조건 설정하는 방법
CREATE TABLE Test(
Null_TEST INT NOT NULL, -- 제약조건으로 NOT NULL 설정
Unique_Test INT UNIQUE, -- 제약조건으로 UNIQUE 설정
Primary_Test INT PRIMARY KEY, -- 제약조건으로 PRIMARY KEY 설정
Default_Test INT DEFAULT '디폴트', -- 제약조건으로 DEFAULT 설정
Foreign_Test INT, -- FOREIGN KEY 테스트를 위한 필드 선언
FOREIGN KEY (Foreign_Test) REFERENCES Test2 (Foreign_Test)\
-- 제약 조건 FOREIGN KEY 설정.
-- 'Foreign_Test'이 'Test2'의 'Foreign_Test'의 값을 참조하도록 설정
);
CREATE TABLE Test2(
Foreign_Test INT -- Test1에서 참조하는 FOREIGN KEY의 대상값
)
위와 같이 'CREATE'나 'ALTER'와 같이 필드값을 생성하거나 수정, 추가해줄 때 제약조건을 넣어서 설정해줄 수 있다.
혹은 필드값 생성과 별개로 하단에 표기할 수 있다.
CREATE TABLE Test(
Null_TEST INT,
Unique_Test INT,
Primary_Test INT,
Default_Test INT,
constraint test_prkey Primary Key (Primary_Test)
-- constraint + 조건명 + 제약조건 + (필드값)
-- 위와 같이 입력하면 해당 필드에 제약조건을 걸 수 있다
);
이때는 "'constraint' 명령어+ 조건에 붙일 이름 + 제약 조건 ( 필드명 )" 순으로 작성하면 된다.
예시의 'primary key' 뿐 아니라 다양한 조건 추가가 가능하다.
제약 조건의 종류
1. NOT NULL
CREATE TABLE Test(
Null_TEST INT NOT NULL -- NOT NULL을 설정함
);
'NOT NULL'을 제약 조건으로 추가하면 해당 필드에는 'NULL'값이 들어갈 수 없다는 뜻이다.
2. UNIQUE
CREATE TABLE Test(
Unique_Test INT UNIQUE
);
'UNIQUE'를 제약 조건으로 추가하면 해당 필드 내에선 같은 'VALUE'를 입력할 수 없다.
즉 중복값을 입력하는 것이 불가능해진다.
3. PRIMARY KEY
CREATE TABLE Test(
Primary_Test INT PRIMARY KEY
);
'PRIMARY KEY'는 'NOT NULL'과 'UNIQUE'의 제약 조건을 합한 것과 같다.
'PRIMARY KEY'를 지정하면 'NULL'값을 넣을 수도 없고 'UNIQUE'하게 중복값을 넣을 수도 없다.
4. DEFAULT
CREATE TABLE Test(
Default_Test INT DEFAULT '디폴트'
);
'DEFAULT'를 설정하면 필드에 'VALUE'가 없을 경우에 미리 설정된 값을 입력될 수 있다.
5. FOREIGN KEY
CREATE TABLE Test(
FOREIGN KEY (Foreign_Test) REFERENCES Test2 (Foreign_Test)
);
CREATE TABLE Test2(
Foreign_Test INT
);
'FOREIGN KEY'의 경우 테이블이 2개가 필요하다.
그리고 'FOREIGN KEY'를 설정하면 다른 테이블의 필드를 참조하여 두 테이블을 연결하게 만든다.
즉 각각의 테이블은 'FOREIGN KEY'를 통해서 연결될 수 있다.
'FOREIGN KEY'를 사용할 때 참조해야할 필드는 반드시 'UNIQUE' 또는 'PRIMARY KEY'가 적용되어있어야 한다.