본문 바로가기
DataBase/MySQL

MySQL 테이블 제약 조건 정리 (CONSTRAINT 설정)

by 코딩이라구 2022. 10. 1.

MySQL 테이블 제약 조건(CONSTRAINT) 설정

MySQL에서 테이블에 속한 데이터의 무결성을 지키기 위해 데이터를 입력받을 때 검사 규칙을 설정하여 데이터를 안전하게 보호할 수 있습니다. 이때 검사 규칙을 제약조건(CONSTRAINT)이라 하며 테이블 생성(CREATE문) 또는 ALTER문에서 제약 조건을 변경하실 수 있습니다.

 

MySQL 제약 조건의 종류

  1. NOT NULL : 해당 컬럼은 NULL 값을 저장할 수 없습니다.
  2. DEFAULT : 해당 컬럼의 기본값을 설정합니다.
  3. UNIQUE : 해당 컬럼은 각각 서로 다른 값들로만 가져야 합니다.
  4. PRIMARY KEY : 해당 컬럼을 기본 키로 지정합니다.
  5. 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. 참고 자료 링크

 


댓글