데이터베이스-제약조건

지환·2023년 8월 26일
0

Mysql

목록 보기
9/17

출처| https://www.youtube.com/watch?v=UVY0mfa4VP0&list=PLqTUMsvO70nk8WfCyU-IPmc85390CaSqM&index=1

https://cafe.naver.com/thisisMySQL
https://velog.io/@ong_hh/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B5%AC%EC%B6%95

제약조건

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

1. PRIMARY KEY 제약 조건

[데이터의 무결성 제약]

1) PRIMATY KEY 지정방법

USE tabledb;
drop table if exists buytbl, usertbl;
create table usertbl
(	userid	char(10) primary key,
	name	varchar(10)	not null,
    birthday	int 	not null
);

테이블의 정보를 보기 위해서는 DESCRIBE를 사용하면 된다.

추가적으로 PRIMARY KEY를 사용하면서 키의 이름까지 사용할 수 있다.

예를들어, PK_userTBL_userID와 같은 이름을 붙여 주면 이름만으로도 PK가 userTBL 테이블의 userID 열에 지정됨을 읽을 수 있다.

2) PRIMATY KEY 지정방법

create table usrtbl
(	userid	char(8) not null,
	name	varchar(10)	not null,
    birthyear	int not null,
    constraint	primary key PK_userTBL_userID (userid)
);

3) PRIMATY KEY 지정방법

ALTER 활용한 방법

  • ALTER 기억 안 나면 해당 블로그 참고
create table usertbl
(	userid	char(8) not null,
	name	varchar(10)	not null,
	birthyear	int not null
);
alter table usertbl
	add constraint pk_usertbl_userid
		primary key (userid);
  • add constraint pk_usertbl_userid : 제약 조건을 추가하자. 제약 조건 이름은 PK_usertbl_userID이다.

  • primary key (userid): 추가할 제약 조건은 기본 키 제약 조건이다. 그리고 제약 조건을 설정할 열은 userID이다.

해당 표를 보면 한 열씩 확인을 했을 때, pk의 조건에 맞지 않는다.

그렇기 때문에 제품코드 + 제품 일련 번호를 합쳐 하나의 PK로 볼 수 있다.

4)

CREATE TABLE prodTbl
(	prodCode	char(3)	not null,
	prodID		char(4)	not null,
    prodDate	datetime	not null,
    prodCur		char(10)	null
);

alter table prodtbl add constraint PK_proCode_prodID primary key (prodCode, prodID);
CREATE TABLE prodTbl
(	prodCode	char(3)	not null,
	prodID		char(4)	not null,
    prodDate	datetime	not null,
    prodCur		char(10)	null,
    constraint pk_protbl_procode_prodid primary key(prodCode,prodID)
);

2. FOREIGN KEY 제약 조건

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

  • 외래 키를 정의하는 테이블인 buytbl외래 키 테이블 이라고 부르고, 외래 키에 의해서 참조가 되는 테이블인 usertbl을 그냥 기준 테이블이라고 한다.

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

예제1) fk 키 설정

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)
);


예제2) key 이름을 준다.

create table buytbl
(
	num int auto_increment not null primary key,
    userid	char(8) not null,
    prodName	char(6) not null,
    constraint FK_usertbl_buytbl foreign key (userid) references usertbl(userid)
);

예제3) alter 이용한다.

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);

ON DELETE CASCADE

alter table buytbl drop foreign key fk_usertbl_buytbl;

alter table buytbl add constraint fk_usertbl_buytbl foreign key (userid) references usertbl(userid) on update cascade;
  • 별도로 지정하지 않으면

    • on update no action

    • on delete no action

3. UNIQUE 제약 조건

  • UNIQUE 제약조건은 말 그대로 해당 컬럼에 들어가는 값이 유일해야 한다는 의미다. 즉 중복 값을 허용하지 않는다.
  • UNIQUE 제약조건 역시 데이터베이스 객체이므로, 컬럼 정의 부분에 UNIQUE를 명시하거나 별도로 CONSTRAINTS 키워드를 사용해 정의할 수 있다.

  • UNIQUE와 NOT NULL을 같이 명시하면 해당 컬럼에 들어오는 값은 유일함은 물론 반드시 입력해야 한다. 또한 NULL 허용 컬럼에도 UNIQUE 제약조건을 붙일 수 있다.

4. CHECK 제약 조건

  • SQL 제약조건 중 CHECK는 특정 컬럼의 입력 가능한 값의 범위를 지정할 때 사용한다.

  • 만약 어느 한 컬럼에 CHECK 제약조건을 설정한다면, 그 컬럼은 특정한 범위 안에서의 값만 허용한다.

  • 만약 어느 한 테이블에 CHECK 제약조건을 설정한다면, 그 레코드의 다른 컬럼을 기반으로 특정 컬럼의 값을 제한할 수도 있다.

Age라는 컬럼에 18세 이상만 데이터를 넣을 수 있도록 하는 CHECK 제약조건을 가진 Customer라는 테이블을 만들어 보자.

CREATE TABLE Customer (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CHECK (Age>=18)
);

5. DEFAULT 제약 조건

  • DEFAULT 제약 조건은 해당 필드의 기본값을 설정할 수 있게 한다.

  • 만약 레코드를 입력할 때 해당 필드 값을 전달하지 않으면, 자동으로 설정된 기본값을 저장한다.

6. NULL 값 허용

제약조건은 여러 종류가 있는데, 가장 기본적으로 CREATE TABLE에서 쓰이는 NOT NULL에 대해서 알아보자.

NOT NULL 조건의 디폴트 값은 NULL이다. 그래서 테이블을 만들 때 별로로 NOT NULL을 넣어주지 않으면, 자동으로 기본값인 NULL이 제약조건으로 설정된다.

NOT NULL은 NULL값을 허용하지 않겠다!! 쉽게 말해서 빈칸으로 두지 말고 반드시 데이터 값이 입력되어야만 한다!!

이런 규칙이다. 따라서 반드시 특정 데이터 값이 존재해야만 새로운 레코드를 넣거나 수정할 때 오류가 발생하지 않는다.

그럼 이제 예문을 통해서 확인해 보도록 하자. 필자는 memberID, name, phone이라는 이름의 컬럼을 가진 members 테이블을 만드는데, memberID와 name은 반드시 값이 들어가도록 설정하겠다.

> CREATE TABLE members (
    -> memberID int NOT NULL,
    -> name varchar(20) NOT NULL,
    -> phone varchar(20)
    -> );



> desc members;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| memberID | int(11)     | NO   |     | NULL    |       |
| name     | varchar(20) | NO   |     | NULL    |       |
| phone    | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
profile
아는만큼보인다.

0개의 댓글