MySQL 테이블 제약 조건(CONSTRAINT) 설정
MySQL에서 테이블에 속한 데이터의 무결성을 지키기 위해 데이터를 입력받을 때 검사 규칙을 설정하여 데이터를 안전하게 보호할 수 있습니다. 이때 검사 규칙을 제약조건(CONSTRAINT)이라 하며 테이블 생성(CREATE문) 또는 ALTER문에서 제약 조건을 변경하실 수 있습니다.
MySQL 제약 조건의 종류
- NOT NULL : 해당 컬럼은 NULL 값을 저장할 수 없습니다.
- DEFAULT : 해당 컬럼의 기본값을 설정합니다.
- UNIQUE : 해당 컬럼은 각각 서로 다른 값들로만 가져야 합니다.
- PRIMARY KEY : 해당 컬럼을 기본 키로 지정합니다.
- FOREIGN KEY : 해당 컬럼을 외래 키로 지정합니다.
1. 제약 조건(CONSTRAINT)
테이블 정보 확인(DESCRIBE)을 통한 제약 조건 확인
- DESC 'database_name'.'table_name';
- 데이터베이스 선택(USE) 시
- DESC 'table_name';
/* 예제 */
DESC exmple.sample;
DESC sample;
NOT NULL
- 데이터를 입력받을 때 해당 컬럼(Column)의 NULL 값을 체크하는 제약 조건으로 NOT NULL로 설정할 경우 해당 컬럼은 NULL값을 허용하지 않는다.
- 제약 조건을 설정하지 않을 경우 기본값은 NULL값을 허용한다.
1) 테이블 생성 시 NOT NULL 설정
- CREATE TABLE 'table_name' ('column_name1' 'column_type1' NOT NULL);
/* 예제 */
CREATE TABLE sample
(
id INT NOT NULL,
name VARCHAR(10) NOT NULL
);
2) ALTER문을 사용한 NOT NULL 변경
- 새로운 컬럼 추가 시
- ALTER TABLE 'table_name' ADD 'column_name' 'column_type' NOT NULL;
- 기존 컬럼 제약 조건 변경 시
- ALTER TABLE 'table_name' MODIFY COLUMN 'column_name' 'column_type' NOT NULL;
/* 예제 */
ALTER TABLE sample ADD phoneno INT NOT NULL;
ALTER TABLE sample MODIFY COLUMN phoneno INT NOT NULL;
DEFAULT
- 데이터를 입력받을 때 값이 없으면 기본값을 적용할 수 있는 제약 조건입니다.
- 제약 조건을 설정하지 않았을 경우 기본값은 NULL이 저장된다.
1) 테이블 생성 시 DEFAULT 설정
- CREATE TABLE 'table_name' ('column_name1' 'column_type1' DEFAULT 'constraint_value');
/* 예제 */
CREATE TABLE sample
(
id INT NOT NULL DEFAULT 0,
regist_time DATETIME DEFAULT NOW()
);
2) ALTER문을 사용한 DEFAULT 변경
- 새로운 컬럼 추가 시
- ALTER TABLE 'table_name' ADD 'column_name' 'column_type' DEFAULT 'constraint_value';
- 기존 컬럼의 제약 조건 변경 시
- ALTER TABLE 'table_name' MODIFY COLUMN 'column_name' 'column_type' DEFAULT 'constraint_value';
- ALTER TABLE 'table_name' ALTER 'column_name' SET DEFAULT 'constraint_value';
/* 예제 */
ALTER TABLE sample ADD regist_time DATETIME DEFAULT NOW();
ATLER TABLE sample MODIFY COLUMN regist_time DATETIME DEFAULT NOW();
ALTER TABLE sample ALTER regist_time SET DEFAULT NOW();
UNIQUE
- 테이블에서 해당 컬럼의 값은 서로 다른 값을 가져야 하며, 중복되는 값이 없는 유일한 값이어야 합니다.
1) 테이블 생성 시 제약 조건 UNIQUE 설정
- CREATE TABLE 'table_name' ('column_name1' 'column_type1' UNIQUE);
- CREATE TABLE 'table_name' ('column_name1' 'column_type1', CONSTRAINT 'constraint_name' COLUMN 'column_name1');
/* 예제 */
CREATE TABVLE sample
(
id INT NOT NULL UNIQUE
);
CREATE TABLE sample
(
id INT NOT NULL,
CONSTRAINT sample_unique_id COLUMN id
);
2) ALTER문을 사용한 UNIQUE 변경
- 새로운 컬럼 추가
- ALTER TABLE 'table_name' ADD 'column_name' 'column_type' UNIQUE;
- ALTER TABLE 'table_name' ADD CONSTRAINT 'constraint_name' UNIQUE 'column_name';
- 기존 컬럼의 제약 조건 변경
- ALTER TABLE 'table_name' MODIFY COLUMN 'column_name' 'column_type' UNIQUE;
- ALTER TABLE 'table_name' MODIFY COLUMN CONSTRAINT 'constarint_name' UNIQUE 'column_name';
/* 예제 */
ALTER TABLE sample ADD id INT UNIQUE;
ALTER TABLE sample ADD CONSTRAINT sample_unique_id UNIQUE id;
ALTER TABLE sample MODIFY COLUMN id INT UNIQUE;
ALTER TABLE sample MODIFY COLUMN CONSTRAINT sample_unique_id UNIQUE id;
PRIMARY KEY
- 해당 컬럼을 기본 키로 지정합니다. 제약조건 PRIMARY KEY로 지정된 컬럼은 NOT NULL과 UNIQUE의 속성을 동시에 설정됩니다.
- UNIQUE는 한 테이블에 여러 개의 컬럼을 지정할 수 있지만, PRIMARY KEY는 한 테이블에 오직 하나의 컬럼만 설정이 가능하며 또한 테이블의 데이터를 더욱 쉽고 빠르게 찾을 수 있습니다.
1) 테이블 생성 시 제약 조건 PRIMARY KEY 설정
- CREATE TABLE 'table_name' ('column_name1' 'column_type1' PRIMARY KEY);
- CREATE TABLE 'table_name' ('column_name1' 'column_type1', CONSTRAINT 'column_name1' PRIMARY KEY 'column_name');
/* 예제 */
CREATE TABLE sample
(
id INT PRIMARY KEY
);
CREATE TABLE sample
(
id INT,
CONSTRAINT sample_pk_id PRIMARY KEY id
);
2) ALTER문을 사용한 PRIMARY KEY 변경
- 새로운 컬럼 추가
- ALTER TABLE 'table_name' ADD 'column_name' 'column_type' PRIMARY KEY;
- ALTER TABLE 'table_name' ADD CONSTRAINT 'constraint_name' PRIMARY KEY 'column_name';
- 기존 컬럼의 제약 조건 변경
- ALTER TABLE 'table_name' MODIFY COLUMN 'column_name' column_type' PRIMARY KEY;
- ALTER TABLE 'table_name' MODIFY COLUMN CONSTRAINT 'constraint_name' PRIMARY KEY 'column_name';
/* 예제 */
ALTER TABLE sample ADD id INT PRIMARY KEY;
ALTER TABLE sample ADD CONSTRAINT sample_pk_id PRIMARY KEY id;
ALTER TABLE sample MODIFY COLUMN id INT PRIMARY KEY;
ALTER TABLE sample MODIFY COLUMN CONSTRAINT sample_pk_id PRIMARY KEY id;
FOREIGN KEY
- 해당 컬럼을 외래 키로 지정합니다. 제약 조건 FOREIGN KEY로 지정되면 다른 테이블과 연결해주는 역할을 하며, 기준이 되는 테이블의 내용을 참조해서 레코드가 입력됩니다.
- 외래 키는 다른 테이블에 의존합니다.
- 외래 키가 참조하는 다른 테이블은 반드시 UNIQUE나 PRIMARY KEY 제약 조건으로 설정되어 있어야 합니다.
1) 테이블 생성 시 제약 조건 FOREIGN KEY 설정
- CREATE TABLE 'table_name' ('column_name1' 'column_type1', CONSTRAINT 'constraint_name' FOREIGN KEY 'column_name' REFERENCES 'table_name2' ('base_column_name');
/* 예제 */
-- sample 테이블의 id 컬럼이 test 테이블의 no 컬럼을 기준으로 외래 키를 설정
CREATE TABLE sample
(
id INT,
CONSTRAINT sample_fk_id FOREIGN KEY 'id' REFERENCES test (no);
);
2) ALTER문을 사용한 FOREIGN KEY 변경
- ALTER TABLE 'table_name' ADD CONSTRAINT 'constraint_name' FOREIGN KEY 'column_name' REFERENCES 'table_name2' ('base_column_name');
/* 예제 */
ALTER TABLE sample ADD CONSTRAINT sample_fk_id FOREIGN KEY id REFERENCES test (no);
2. 참고 자료 링크
'DataBase > MySQL' 카테고리의 다른 글
MySQL 테이블 존재 여부 확인 방법 (0) | 2022.10.11 |
---|---|
MySQL SELECT문 정리 (DB 데이터 조회) (0) | 2022.10.04 |
MySQL DROP문 정리 (DB와 TABLE 삭제) (0) | 2022.10.03 |
MySQL ALTER문 정리 (DB와 Table 변경) (0) | 2022.09.30 |
MySQL CREATE문 정리 (DB와 TABLE 생성) (0) | 2022.09.30 |
댓글