DB

MYSQL 제약 조건

그zi운아이 2023. 9. 27. 14:14

제약 조건

제약조건이란 데이터의 무결성을 지키기 위한 제한된 조건을 의미한다. MYSQL은 데이터의 무결성을 위해 5가지의 제약조건을 제공한다.

  • PRIMARY KEY 제약 조건
  • FOREIGN KEY 제약 조건
  • UNIQUE 제약 조건
  • CHECK 제약조건
  • DEFAULT 정의
  • NULL 값 허용

기본 키 제약 조건

테이블에 존재하는 많은 행의 데이터를 구분할 수 있는 식별자를 기본키(PRIMARY KEY)라고 부른다. 

대부분의 테이블은 키본 키를 가지져야 하고 없어서 구성이 가능하지만 대부분 기본 키를 설정해 주어야 한다.

기본 키 제약 조건은 기본키는 테이블 별로 하나만 존재해야 하며  이는 해당 테이블의 각 레코드를 유일하게 식별한다. NULL 값을 허용하지 않으며 자동으로 UNIQUE 제약조건이 부여된다.

CREATE TABLE Users (
  ID INT PRIMARY KEY,
  Name VARCHAR(50)
);

 

외래 키 제약 조건

외래 키 제약 조건은 두 테이블 사이의 관계를 선언함으로써 데이터의 무결성을 보장해 주는 역할을 한다. 

외래 키 관계를 설정하면 하나의 테이블이 다른 테이블에 의존하게 된다.

외래 키는 기본키 이거나 UNIUQUE 이여야 한다.

// 테이블 생성 시점에 추가 
CREATE TABLE Orders (
  OrderID INT PRIMARY KEY,
  UserID INT,
  FOREIGN KEY (UserID) REFERENCES Users(ID)
);

//ALTER TABLE 명령을 사용하여 추가 
ALTER TABLE Orders
ADD FOREIGN KEY (UserID) REFERENCES Users(ID);

외래키 에는 ON DELETE 또는 ON UPDATE 옵션을 설정할 수 있다 이 옵션을 참조하는 테이블의 레코드가 삭제되거나 수정될 때 어떤 동작을 수행할지 지정한다.

CASCADE: 참조하는 테이블의 레코드가 삭제되거나 수정되면 해당하는 외래 키를 가진 레코드도 같이 삭제되거나 수정된다.
SET NULL: 참조하는 테이블의 레코드가 삭제되거나 수정되면 외래 키 값을 NULL로 설정된다.


NO ACTION: 아무런 동작을 하지 않는다. 만약 참조 무결성이 깨진다면, 에러를 반환한다.
RESTRICT: NO ACTION과 유사하지만, 검사 시점이 다르다.

 

UNIQUE 제약 조건

UNIQUE 제약 조건은 중복되지 않는 유일한 값을 입력해야 하는 조건이다. PRIMARY KEY 와 비슷하나 차이점으로 NULL 값을 허용한 다는 점이 있다.

CREATE TABLE Users (
  ID INT PRIMARY KEY,
  Email VARCHAR(50) UNIQUE
);

 

CHECK 제약 조건

CHECK 제약 조건은 입력되는 데이터를 점검하는 기능을 한다. 조건을 명시하여 그 조건에 맞는 데이터만 입력 가능

CREATE TABLE Users (
  ID INT PRIMARY KEY,
  Age INT CHECK (Age >= 18)
);

 

DEFAULT 정의

DEFAULT는 값을 입력하지 않았을떄, 자동으로 입력되는 기본 값을 정의하는 방법이다.

CREATE TABLE Users (
  ID INT PRIMARY KEY,
  Age INT DEFAULT 18
);

 

NULL 값 허용 

NULL값을 허용하지 않으려면 NOT NULL을 사용하면 된다.  NOT NULL 제약을 가진 열에는 NULL 값을 입력할 수 없고

기본키가 설정된 열에는 NULL 값이 있을 수 없으므로 생략하면 자동으로 NOT NULL로 인식된다.

NULL 값을 아무것도 없다는 의미로 공백이나(' ')이나 0과 같은 값과는 다르다.

CREATE TABLE Users (
  ID INT NOT NULL,
  Name VARCHAR(50) NOT NULL
);

'DB' 카테고리의 다른 글

인덱스(INDEX)  (1) 2023.10.05
[DB] 뷰  (0) 2023.09.27
SQL 프로그래밍  (0) 2023.09.23
조인(JOIN)  (0) 2023.09.22
MYSQL 데이터 형식과 내장함수  (1) 2023.09.21