제약 조건(Constraint)
- 데이터의 무결성을 지키기 위한 제한된 조건을 의미한다.
- 특정 데이터를 입력 시 어떠한 조건을 만족했을 때에 입력되도록 제약한다.
ex) 동일한 아이디로 다시 회원 가입이 안되는 것
데이터 무결성을 위한 제약조건
- PRIMARY KEY 제약 조건
- FOREIGN KEY 제약 조건
- UNIQUE 제약 조건
- CHECK 제약 조건(MySQL 8.0.16부터 지원)
- DEFAULT 정의
- NULL
기본키(Primary Key) 제약조건
- 테이블에 존재하는 많은 행의 데이터를 구분할 수 있는 식별자
- 중복이나 NULL 값이 입력될 수 없다.
- 기본키로 생성한 것은 자동으로 클러스터형 인덱스를 생성한다.
- 테이블에서 기본키를 하나 이상 열에 설정할 수 있다.
drop table if exists userTbl; -- 이미 테이블이 있다면 삭제
create table userTbl(
userId char(8) not null,
name varchar(10) not null,
birthYear int not null,
constraint primary key PK_userTbl_userId(userId) -- userId를 기본키로하고 이름을 직접 지정할 수 있다.
);
기본키 생성
/* 가장많이 사용하는 방법, 테이블 생성시 컬럼에 직접 지정*/
create table userTbl(
userId char(8) not null primary key,
name varchar(10) not null,
birthYear int not null
);
/* 테이블 생성시 따로 지정*/
create table userTbl(
userId char(8) not null,
name varchar(10) not null,
birthYear int not null,
constraint primary key PK_userTbl_userId(userId) -- userId를 기본키로하고 이름을 직접 지정할 수 있다.
);
/* 테이블 생성시 기본키를 설정하지 않은경우 - 따로 지정 */
create table userTbl(
userId char(8) not null,
name varchar(10) not null,
birthYear int not null
); -- 기본키 지정안한 테이블
-- 테이블 수정을 통해 기본키 설정
alter table usertbl-- alter table: 테이블 수정
add constraint primary key PK_usertbl_userId(userId); -- 기본키 추가
show keys from userTbl;
/* 여러 컬럼을 기본키로 설정 */
drop table if exists prodTbl;
create table prodTbl
(
prodCode char(3) not null,
prodId char(3) not null,
prodDate datetime not null,
prodCur char(10) null
);
desc prodTbl;
alter table prodTbl
add constraint PK_prodtbl_prodCode_ProdId
primary key(prodCode, prodId); -- prodCode 컬럼과 prodId컬럼을 합쳐서 기본키로 설정
show keys from prodTbl; -- show index from prodTbl;과 동일한 결과 (기본키 확인가능)
외래키(Foreign Key) 제약조건
- 두 테이블 사이의 관계를 선언하여 데이터의 무결성을 보장해 주는 역할을 한다.
- 외래 키 관계를 설정하면 하나의 테이블이 다른 테이블에 의존하게 된다.
- 외래 키 테이블이 참조하는 기준 테이블의 열은 반드시 Primary Key이거나 Unique 제약조건이 설정되어 있어야 한다.
- 외래 키의 옵션 중 ON DELETE CASCADE 또는 ON UPDATE CASCADE는 기준테이블의 데이터가 변경(삭제/수정) 되었을 때 외래키 테이블도 자동으로 적용되도록 하는 옵션이다.
외래키 생성
/* 테이블 생성시 외래키 설정*/
create table buyTbl
(
num int auto_increment not null primary key,
userId char(8) not null,
prodName char(6) not null,
foreign key (userId) references userTbl(userId) -- buyTbl.userId와 userTbl.userId 관계를 맺음
);
/* 테이블 생성 후 외래키 별도 설정 */
create table buyTbl
(
num int auto_increment not null primary key,
userId char(8) not null,
prodName char(6) not null
);
alter table buytbl
add constraint FK_userTbl_buyTbl -- 제약조건 이름 설정
foreign key(userId) -- 외래키 지정 컬럼 선택
references userTbl(userId); -- 참고 테이블 컬럼 선택
UNIQUE 제약조건
- 중복되지 않는 유일한 값을 입력해야하는 조건이다.
- PRIMARY KEY 와 비슷하지만 UNIQUE는 NULL값을 허용한다는 점에서 다르다.
- 사용자의 email정보 등을 입력받을 때 설정한다. (중복은되지 않아야하지만 null은 허용될 때)
UNIQUE 설정
/* 테이블 생성시 unique 설정*/
create table userTbl(
userId char(8) not null primary key,
name varchar(10) not null,
birthYear int not null,
email char(30) null unique -- 컬럼에 직접 unique 제약조건을 설정한다.
);
/* 테이블 생성 시 컬럼과 별도로 unique 설정*/
create table userTbl(
userId char(8) not null primary key,
name varchar(10) not null,
birthYear int not null,
email char(30) null,
constraint AK_email unique (email) -- constraint 키이름 unique (컬럼)
);
CHECK 제약조건
- 입력되는 데이터를 점검하는 기능이다.
- ALTER TABLE문으로 제약조건을 추가할 수 있다.
/* 테이블 생성시 컬럼 옆에 check문 으로 설정*/
create table userTbl(
userId char(8) not null primary key,
name varchar(10),
mobile char(3) null,
birthYear int check (birthYear >= 1900 and birthYear <= 2023), -- birthYear이 1900~2023까지만 입력가능하도록 설정
constraint CK_name check (name is not null) -- 이름에 null이 들어가지 않도록 설정
);
/* 테이블 생성 후 check 제약조건 추가 */
alter table userTbl
add constraint CK_mobile
check (mobile in ('010','011','016','017','108','109'));
DEFAULT 정의
- 값을 입력하지 않았을 때 자동으로 입력되는 기본 값을 정의한다.
- ALTER TABLE 사용시 컬럼에 DEFAULT를 지정하기 위해서는 ALTER COLUMN문을 사용해야한다.
DEFAULT 설정
/* 테이블 생성시 DEFAULT 설정 */
create table usertbl
(
userId char(8) not null primary key,
name varchar(10) not null,
birthYear int not null default -1, -- 입력 안하면 -1이 입력됨
addr char(2) not null default '서울', -- 입력 안하면 서울이 입력됨
mobile1 char(3) null,
mobile2 char(3) null,
height smallint null,
mDate date null
);
/* 테이블 생성 후 ALTER TABLE 문을 통해 DEFAULT 설정 */
create table usertbl
(
userId char(8) not null primary key,
name varchar(10) not null,
birthYear int not null, -- 입력 안하면 -1이 입력됨
addr char(2) not null, -- 입력 안하면 서울이 입력됨
mobile1 char(3) null,
mobile2 char(3) null,
height smallint null,
mDate date null
);
alter table usertbl
alter column birthYear set default -1;
alter table usertbl
alter column addr set default '서울';
alter table usertbl
alter column height set default 170;
Null
- NULL 값을 허용하려면 NULL을, 허용하지 않으려면 NOT NULL을 사용한다.
- PRIMARY KEY가 설정된 컬럼에는 자동으로 NOT NULL로 설정된다.
- NULL 값은 ‘아무 것도 없다’라는 의미로 공백(‘ ‘) 이나 0과 다르다.
'DB > MySQL' 카테고리의 다른 글
[MySQL] ALTER TABLE (테이블 수정) (0) | 2023.02.08 |
---|---|
[MySQL] 내장함수 (0) | 2023.02.07 |
[MySQL] 사용자 관리 (0) | 2023.02.03 |
[MySQL] MySQL WorkBench -SQL 단축키 (0) | 2023.02.02 |
댓글