기록해! 정리해!

5-1 본문

Oracle

5-1

zsuling 2022. 5. 20. 11:00

5/20

 

1) PK 제약조건


create table user1(
id nchar(10),
name varchar(20)
);

insert into user1(id, name)
values ('ppk','너구리');

select * from user1;

create table pk_user1(
id nchar(10) primary key,
name varchar(20)
);

insert into pk_user1 (id, name)
values ('ppk','너구리');
insert into pk_user1 (id, name) --에러/중복
values ('ppk','너구리');
insert into pk_user1 ('', name) --에러/not null
values ('ppk','너구리');

create table pk_user2(
id nchar(10),
name varchar(20),
primary key (id)
);

insert into pk_user2 (id, name)
values ('ppk','너구리');
insert into pk_user2 (id, name) --에러/중복
values ('ppk','너구리');
insert into pk_user2 ('', name) --에러/not null
values ('ppk','너구리');


create table pk_user3(
id nchar(10),
name varchar(20),
constraint pk_user3_1 primary key (id)
);

create table pk_user4(
id nchar(10),
name varchar(20),
constraint pk_user3_2 primary key (id, name) --컬럼 2개에 제약조건 걸려면 밑에 하는 수 밖에 없다
);

insert into pk_user4 (id, name)
values ('ppk','너구리1');
insert into pk_user4 (id, name) 
values ('ppk','너구리2');

insert into pk_user4 (id, name)
values ('ppk','너구리1'); --에러/ 중복제약
insert into pk_user4 (id, name)
values ('ppk',''); --에러/ not null

 

create table user11(
id nchar(10),
name varchar(20)not null
);

desc user11;

insert into user11(id, name)
values ('ppk','너구리');

insert into user11(id, name)
values ('ppk','');

create table user11(
id nchar(10),
name varchar(20)
constraint user11_user3_1 not null (id)
); --에러/ not null은 컬럼 옆에 붙을 수 있다


값을 무조건 받아야하는 상황이면 not null 제약조건을 걸어야한다

2) FK 제약조건


create table fk_user11(
id1 nchar(10) not null,
name varchar(20)not null,
foreign key(id1) references user1(id)
); --에러/ user1이 pk로 안잡혀있음
--fk는 pk를 참조해야함

desc pk_user1;

create table fk_user11(
id1 nchar(10) not null,
name varchar(20)not null,
foreign key(id1) references pk_user1(id)
); --생성됨. 참조하는 테이블의 pk만 참조할 수 있다

drop table pk_user1;
drop table fk_user11;

create table pk_user1(
id nchar(10) primary key,
name varchar(20)
);

create table fk_user11(
id1 nchar(10) not null,
age number(3),
foreign key(id1) references pk_user1(id)
);

insert into pk_user1(id, name)
values ('ppk','너구리');

insert into fk_user11(id1,age)
values ('ppk','17');

insert into fk_user11(id1,age)
values ('ppk2','17'); --에러/ 없는 애 넣어서(참조오류)

/*foreign key(id1) references pk_user1(id)
id랑 id1 이름이 같을 필요는 없다

id1은 id에 없는 값을 넣을 순 없다 */

insert into pk_user1(id, name)
values ('ppk2','영심이');

select * from fk_user11;

insert into fk_user11(id1,age)
values ('ppk2','17'); --이제는 생성됨

 

3) Unique 제약조건

 

create table uk_user1(
id nchar(10)unique,
name varchar(20)
);

insert into  uk_user1( id,name)
values ('ppk','영심이');

insert into  uk_user1( id,name)
values ('ppk','영심이'); --에러 / 중복이라고 유니크제약조건 걸림

insert into  uk_user1( id,name)
values ('','영심이'); --null값 가능

select * from uk_user1;

insert into  uk_user1( id,name)
values ('','하늘이'); --null은 중복 가능

 

create table uk_user2(
id nchar(10) not null unique,
name varchar(20) not null unique
); 

-- 의도치않게 pk역할과 동일한 역할이 됨

 

즉,unique 제약조건은 null값을 넣으려고 사용하는 것

 

4)check 제약조건 (339p))

 

Create table ck_user2 (

id nchar(10) not null UNIQUE ,

loc varchar(20) not null check ( loc in('서울','기타' ))

);

 

Create table ck_user3 (

id nchar(10) not null UNIQUE ,

loc varchar(20) not null ,

check ( loc in('서울','기타' ))

);

 

insert into ck_user3 (id, loc) values('ppk','서울');

insert into ck_user3 (id, loc) values('ppk1','경기'); --에러/ 체크제약조건

insert into ck_user3 (id, loc) values('young','기타');

 

select * from ck_user3;

 

5)defualt 제약조건

 

Create table default_user1 (

id nchar(10) ,

loc varchar(20) ,

age number(3)

);

 

insert into default_user1(id)

values('young1');

 

select * from default_user1;

 

Create table default_user2 (

id nchar(10) ,

loc varchar(20) DEFAULT '서울' ,

age number(3) DEFAULT 21

);

 

insert into default_user2(id)

values('young1');

 

select * from default_user2;

 

Create table default_user3 (

id nchar(10) ,

loc varchar(20) DEFAULT '서울' ,

age number(3) DEFAULT '21'

);

 

insert into default_user3(id)

values('young1');

 

select * from default_user3;

 


 

'Oracle' 카테고리의 다른 글

5-3  (0) 2022.05.20
5-2  (0) 2022.05.20
4-SQL 기본문법 정리  (0) 2022.05.20
4-예제3(서브쿼리)  (0) 2022.05.19
4-3  (0) 2022.05.19
Comments