데이터 무결성
not null | null값 허용안함 (중복은 허용) 예) 학생 테이블에서 학생의 이름은 null값일 수 없음 |
unique | 하나의 테이블내에서 한번만 나옴 주로 대체키 설정 시 사용됨 |
primary key | 기본키 : unique + not null |
foreign key | 외래키 |
check | 도메인 무결성 |
제약 조건의 설정
테이블 만들때 속성에 제약조건 지정하기
CREATE TABLE 테이블명
( 속성명 속성타입 [ [ 제약조건명 ] 제약조건 ] ,
속성명 속성타입 ,
…
)
id int CONSTRAINT PK_01 PRIMARY KEY
name varchar(20) NOT NULL
제약조건 위반 튜플 삽입 예
create table customer (
id varchar(30) primary key,
....
)
insert into customer values(null, '2222', 'lee','010','1234567',1979,'seoul');
-- primary key인 id값을 null값으로 주었기 때문에 위반됨.
참조 무결성 제약 조건(외래키)
외래키 값은 다른 테이블의 기본키 값들 중에 하나여 함
속성명 [CONSTRAINTS 제약조건명 ] REFERENCE 참조테이블명 ( 속성명 )
예) 사원 테이블의 부서번호는 부서 테이블의 기본키 값들 중 하나이어야 함
회원탈퇴를 했을때 그동안 썼던 글도 삭제를 시킬것이다 - > 외래키 설정
참조 무결성 설정 및 삽입 오류의 예
먼저 부모테이블과 자식테이블 설정
create table department5(
id varchar(20) primary key,
deptname varchar(20) not null,
code char(13) not null unique key
);
create table employee5(
id varchar(20) primary key,
name varchar(20) not null,
code char(13) not null unique key,
dept_id varchar(20),
foreign key (dept_id) references department5(id)
);
둘을 외래키로 연결해줌
employee5 테이블 가장 마지막줄
employee5테이블의 dept_id 와 department5테이블의 id로 연결된것을 알 수 있음
department5 테이블에 튜플 삽입
insert into department5 values('abcd','환경부','d548e');
-- 전체 속성에 넣을거면 속성명 생략 가능
employee5 테이블에 튜플 삽입
insert into employee5 values('wwww','seri','d548e','cdef');
-- 삽입불가능
-- 이유 : department5 테이블의 id 값과 employee5 테이블의 dept_id값이 같아야함
-- 'abcd'=/='cdef'
insert into employee5 values('wwww','seri','d548e','abcd');
-- 이렇게 둘을 같게 설정해주면 튜플 삽입이 가능해짐.
on update cascade : 참조키가 업데이트 되면 외래키도 업데이트한다
on delete cascade : 참조키가 삭제되면 외래키도 삭제한다
create table board(
no int auto_increment primary key,
content varchar(1000),
id varchar(10),
foreign key(id) references membership(id) on update cascade on delete cascade
);
check 제약조건 (컬럼부분에서 제약조건을 설정하는 방법)
도메인 무결성 제약조건
입력값의 제한을 두는 조건 . 범위 이외의 값이 들어오면 수행하지않게 막는다.
create table domaincon(
id varchar(20) primary key,
password varchar(30),
age int check(age>=19)
);
insert into domaincon(id,password, age) values ('abcd', '1234',20); -- 튜플 삽입 가능
insert into domaincon(id,password, age) values ('aaaa', '1234',15); -- 튜플 삽입 불가능 : 19세 미만이라서 안됨
테이블 수준 제약조건 (컬럼부분이 끝난 뒤 마지막에 제약조건을 설정하는 방법)
속성 단위로 제약조건 설정은 표현에 있어서 제약이 따름
-- 예를들어 복합키의 경우 ( 여러개 속성이 합쳐져서 키가 됨 ) 등
create table 테이블명 (
속성명 속성타입
....
[constraint제약조건명] 제약조건 (속성명)
)
테이블 수준 제약조건 설정의 예
create table customer5(
name varchar(20),
phone varchar(11),
birthday datetime,
address varchar(100)
constraint customer 3_combo_pk primary key (name,phone)
);
주의) sql문을 쓸때 콤마 위치 꼭 잘 확인할것
'Programming > SQL' 카테고리의 다른 글
[SQL/실습] 회원가입 DB 테이블 만들기 / 제약조건 설정 (0) | 2020.12.16 |
---|---|
[SQL/실습] 게시판 테이블 만들어보기 / 제약조건 설정 (0) | 2020.12.16 |
[SQL/실습] primary key / not null / unique 테스트 (0) | 2020.12.15 |
[SQL/실습] 데이터베이스 생성 / 테이블 생성 / 튜플 추가 / 튜플 삭제 / 튜플 수정 / 튜플 조회 (0) | 2020.12.15 |
[SQL/실습] 데이터 구조 생성과 변경 - 테이블 만들기 전 생각해야할것들 (0) | 2020.12.15 |