관계형데이터베이스 제약조건

portal2moon·2020년 11월 10일
1

database

목록 보기
1/1

제약조건


  • 제약조건이란 데이터의 무결성을 지키기 위한 제한된 조건이다.
  • 특정 데이터를 입력 할 때 무조건 입력되는 것이 아닌, 어떠한 조건을 만족했을 때 입력되도록 제약 할 수 있다.

MySql에서 제공하는 제약조건

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

기본키(PRIMARY KEY) 제약조건


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

기본키에 값은 중복되지 않으며 NULL 일 수 없다.

하나의 열에만 기본키를 설정 할 수 있고, 두 개의 열을 합쳐서 기본키를 설정 할 수도 있다.
대부분의 테이블은 기본키를 갖는 열을 가져야 한다.

CREATE TABLE sometable(
	num INT NOT NULL PRIMARY KEY,
	price INT NOT NULL,
   	amount SMALLINT NOT NULL,
    	...
);

기본키를 지정할 열에 PRIMARY KEY 예약어를 넣어주면 된다.

모든 제약 조건은 이름을 가지는데 위 처럼 지정해 주지 않을 경우 MYSQL이 알아서 지정한다.
직접 이름을 지정하려면 다음과 같은 구문을 사용하자.

CREATE TABLE sometable(
	num INT NOT NULL,
	price INT NOT NULL,
   	amount SMALLINT NOT NULL,
    	CONSTRAINT PRIMARY KEY pk_sometable_num (num)
);

위 구문에서 CONSTRAINT 는 생략이 가능하다.
ALTER 구문을 사용해서 테이블을 수정 할 때 제약조건을 추가 할 수 있다.

ALTER TABLE anyTable
	ADD CONSTRAINT PK_anyTable_userID
    	PRIMARY KEY (userID);

2개 의 열을 합쳐서 기본키로 설정 할 수 있다.

CREATE TABLE sometable(
	num INT NOT NULL,
	price INT NOT NULL,
   	amount SMALLINT NOT NULL,
    	CONSTRAINT pk_sometable_num_price
        	PRIMARY KEY (num, price)
);

외래키(FOREIGN KEY) 제약조건


외래키 제약조건은 두 테이블 사이의 관계를 선언함으로써 데이터의 무결성을 보장해 주는 역할을 한다. 외래키 관계를 설정하면 하나의 테이블이 다른 테이블에 의존하게 된다.

외래 키 테이블이 참조하는 테이블의 열은 반드시 primary key 이거나 unique 제약조건이 설정되어 있어야한다.

CREATE TABLE tableA(
	userID CHAR(8) NOT NULL PRIMARY KEY,
    name VARCHAR(10) NOT NULL,
    birthYear INT NOT NULL
);

CREATE TABLE tableB(
	num INT NOT NULL PRIMARY KEY,
    userID CHAR(8) NOT NULL,
    prodName CHAR(6) NOT NULL,
    FOREIGN KEY(userID) REFERENCES tableA(userID)
);

tableB 의 userID 열은 tableA의 userID열을 참조하도록 FOREIGN KEY로 설정한 것이다.
참조하는 테이블의 열인 userID 는 PRIMARY KEY 제약조건이 설정되어있다.

기본키를 설정할 때 와 마찬가지로 제약조건의 이름을 설정 하기 위해서 다음을 추가 해 주면 된다.

CREATE TABLE tableB(
	num INT NOT NULL PRIMARY KEY,
    	userID CHAR(8) NOT NULL,
   	prodName CHAR(6) NOT NULL,
    	CONSTRAINT FK_tableB_userID
    		FOREIGN KEY(userID) REFERENCES tableA(userID)
);

ALTER TABLE 구문을 이용하는 방법.

ALTER TABLE tableB
	ADD CONSTRAINT FK_tableA_tableB
    	FOREIGN KEY(userID) REFERENCES tableA(userID)

외래키 옵션 중 ON DELETE CASCADE 또는 ON UPDATE CASCADE 가 있는데 이는 참조가 되는 테이블의 데이터가 변경되었을 때 참조하는 테이블도 자동으로 적용되도록 설정 하는 것이다.

예로 tableA 의 userID가 aad2212 였는데 zol9803 으로 바꾸면 tableB 의 userID 도 zol9803으로 자동으로 바뀐다는 뜻이다.

ALTER TABLE tableB
	ADD CONSTRAINT FK_tableA_tableB
    	FOREIGN KEY(userID) REFERENCES tableA(userID)
	ON UPDATE CASCADE

아무것도 지정하지 않을 경우 ON UPDATE CASCADE 와 ON DELETE CASCADE를 지정한 것과 같은 상태이다.

UNIQUE 제약조건


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

CREATE TABLE member(
	userID CHAR(8) NOT NULL PRIMARY,
    name VARCHAR(10) NOT NULL,
    email CHAR(30) null,
    CONSTRAINT AK_email UNIQUE (email)
);

CHECK 제약조건


CHECK 제약조건은 입력되는 데이터를 점검하는 기능이다. 키(height) 값에 마이너스값이 들어올 수 없게 한다든지, 출생년도가 1900년 이후여야 한다든지, 등등 조건을 지정한다.

CREATE TABLE member(
	userID CHAR(8) NOT NULL PRIMARY,
  	name VARCHAR(10),
	birthYear INT CHECK (birthYear >= 1900 AND birthYear <= 2023),
    	CONSTRAINT CK_name CHECK (name IS NOT NULL)
);

첫번째 CHECK 제약조건은 출생년도의 제한을 둠.
두번째 CHECK 제약조건은 CONSTRAINT 를 통해 이름을 지정하며 제약조건을 추가.

DEFAULT 정의


DEFAULT 는 값을 입력하지 않을 경우 자동으로 입력되는 기본 값이다.

CREATE TABLE member(
	userID CHAR(8) NOT NULL PRIMARY,
  	name VARCHAR(10) NOT NULL,
    	email CHAR(30) null,
        birthYear INT NOT NULL DEFAULT -1,
        height SMALLINT NULL DEFAULT 170
);

ALTER 을 통해 지정하기

ALTER TABLE member
	ALTER COLUMN birthYear SET DEFAULT -1;

값을 입력할 때

INSERT INTO member VALUES('LLS', '김강석', 'xxx11@a.a',default, default)
-> default 는 DEFAULT 로 설정된 값을 자동 입력.
INTSERT INTO member(userID, name, email) VALUES('LLS', '김강석', 'xxx11@a.a')
-> 열이름이 명시되지 않으면 DEFAULT로 설정된 값 입력.
profile
아예 안쓰는것보단.. 조금이라도 써 놓는 것이 도움이 될것같아 만든 벨로그입니다

0개의 댓글