본문 바로가기
프로그래밍 공부 정리/database

제약(primary key, not null, unique,default,check)

by 메기사랑 2021. 11. 21.

레코드를 추가하는 방법

insert into 테이블이름 values(값1,값2, ...);


이때에는 값의 수와 순서가 테이블의 컬럼의 수와 순서가 동일해야 합니다.

insert into 테이블이름(칼럼1, 칼럼2, ..) values(값1, 값2,..);


명시한 컬럼의 순서대로 값을 나열합니다.
이때에는 명시한 칼럼 이외의 칼럼의 null을 허용하는 컬럼이어야 합니다.

 

 

 

테이블의 삭제

drop table 테이블이름;

 

 

not null
==> null이 아니기만 하면 됩니다.
==> 중복을 허용합니다.

 

unique는 유일한지만 검사합니다. 
그래서 null을 허용합니다.

primary key
==> not null + unique
==> null을 허용하지 않고 유일해야 합니다.
==> 주식별자
==> 다른 레코드와 구별하기 위한 용도로 사용
==> 테이블 생성시에 여러가지 속성들 중에 주식별자로 사용할 컬럼을 정해서 설정합니다.

 

primary key 설정을 
 컬럼레벨에 설정할 수 도 있고
 테이블레벨에 설정할 수 도 있어요

create table 테이블이름(
	컬럼1 `primary key`,					<-----  컬럼레벨
	컬럼2	 .	

)	;



create table 테이블이름(
	컬럼1, 
	컬럼2..
	primary key (컬럼)				<--------- 테이블레벨
);

 

 

<< 컬럼레벨의 key설정 >>

create table member(
id varchar2(20) primary key,
pwd varchar2(20),
name varchar2(20)
);


<< 테이블레벨의 key설정 >>

create table member(
id varchar2(20),
pwd varchar2(20),
name varchar2(20),
primary key(id)
);

 

** 두개이상의 속성이 합쳐져서 주식별자로 설정할 수 있어요!
==> 하지만 이 때에는 컬럼레벨에서는 표현할 수 없고 테이블레벨에서 설정해야 합니다.


** 참조키를 설정하는 칼럼은 반드시 부모테이블의 "주식별자"이어야 합니다.

아래의 두 테이블을 부모자식 관계라고 가정해봅시다.(주종관계)

dept <--- 부모테이블(부모개체)
emp<-- 자식테이블(자식개체)

emp테이블은 dept테이블을 참조하고 있어요!

부모자식관계가 설정이 되어 있을때에 
"부모테이블"을 함부로 삭제 할 수 없어요.

SQL> drop table dept;
drop table dept
           *
1행에 오류:
ORA-02449: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있습니다


부모자식관계가 설정이 되어 있고
테이블을 다시 생성해야 하는 상황이라면
"자식테이블"을 먼저 삭제하고 "부모테이블"을 삭제 할 수 있습니다.

 

dept테이블과 emp테이블을 만들어 두었습니다.
여기에 레코드를 추가하려고 합니다.

마찬가지로 emp테이블에 먼저 레코드를 추가할 수 없어요!
부모테이블인 dept에 레코드가 먼저 추가되어야 합니다

부모테이블에서 레코드를 삭제할때에 
자식테이블에서 참조하고 있는 레코드들을 연쇄하여 삭제하고자 한다면
테이블생성시에 on delete cascade을 붙여줍니다

ex)
create table emp(
	eno number,
	ename varchar2(20),
	salary number,
	dno number,
	primary key (eno),
	foreign key (dno) references dept(dno) on delete cascade
);

 

 

defalut 예시

create table newbook(
	bookid number primary key,
	bookname varchar2(30),
	publilsher varchar2(30) default '쌍용미디어',
	price number default 30000
);


insert into newbook values(1, '재미있는 자바', '한빛미디어', default);
insert into newbook values(2, '신나는자바', default, default);
insert into newbook(bookid, bookname) values(3, '즐거운 자바');
insert into newbook values(4, '재미있는 오라클', '한빛미디어', 50000);

 

check 예시

create table newbook(
	bookid number primary key, 
	bookname varchar2(30) not null,
	publisher varchar2(30) default '쌍용미디어',
	price number default 10000 check(price >= 1000)
);

insert into newbook values(1, '재미있는 자바', default, default);
insert into newbook values(2, '신나는 자바', '한빛미디어', 500);

*
1행에 오류:
ORA-02290: 체크 제약조건(C##MADANG.SYS_C008333)이 위배되었습니다

 

'프로그래밍 공부 정리 > database' 카테고리의 다른 글

숫자 관련 오라클 함수  (0) 2021.11.23
DCL, DDL, DML  (0) 2021.11.22
제약: 참조키 설정, 개체무결성, 참조무결성  (0) 2021.11.20
having, self join, outer join  (0) 2021.11.19
VO,DAO,join, 집계함수  (0) 2021.11.18