본문 바로가기
Kosta DevOps 과정 280기/Java

제약의 종류와 설정

by 롯슈83 2024. 6. 18.
  • DDL 과 DCL 은 자동 커밋이 되기 때문에 rollback을 할 수 없다. 즉, rollback과 커밋은 DML 이 대상이 된다.

null : null을 허용할 수 있음(기본값)

  • 예시 코드
//테이블 생성
create table newbook(
	bookid number,
    bookname varchar2(20),
    publisher varchar2(20),
    price number
);

//테이블 보기
desc newbook;

insert into newbook values(1, '재미있는 자바', '코스타미디어', 30000);
insert into newbook values(2, '신나는? 자바', null, null);
insert into newbook(bookname, bookid, price, publisher) values('신나.는 오라클',3, 35000, '한빛미디어');
insert into newbook(bookid, bookname) values(4, '신나는 스프링');
commit;

insert into newbook(bookid) values(4);
rollback;



//형식1 - 값의 수와 순서는 테이블 구조와 동일해야 한다.
insert into 테이블 이름 values(값1, 값2, ...);

//형식2 - 나열한 칼럼의 순서대로 값을 써준다.
insert into 테이블 이름(컬럼1, 컬럼2)  values(값1, 값2,...);
  • 연습 1- 책번호와 가격만 가지고 레코드를 추가하기
insert into newbook(bookid, price) values(5, 100000);
insert into newbook values(6, null, null, 1020);
//테이블 삭제
drop table 테이블 이름;

 

 

not null : null을 허용할 수 없음(값 생략 불가) 

  • 연습1 - 도서 번호, 도서명 not null 제약을 주어 테이블을 만들고 레코드를 추가하여 테스트 해본다.
//테이블 생성
create table newbook(
	bookid number not null,
    bookname varchar2(20),
    publisher varchar2(20),
    price number
);

//조회
desc newbook;
  • null 삽입해보기
insert into newbook values(null, '댕', 'el', 20);

 

unique: 유일 해야 함(값의 중복을 허용하지 않음)

  • 도서 번호에 unique 제약을 설정하여 테이블을 생성하고 다양한 레코드를 추가하여 테스트 해봅니다.
create table newbook(
	bookid number unique,
    bookname varchar2(20),
    publisher varchar2(20),
    price number
);
  • 중복값 넣어보기
insert into newbook values(5, '테스트1', '테스', 20);
insert into newbook values(5, '테스트2', '테스트!!!!', 20);
//단 null일경우에는 여러 개 넣을 수 있다.
insert into newbook values(null, '테스트2', '테스트!!!!', 20);
insert into newbook values(null, '테스트2', '테스트!!!!', 20);

primary key : 주식별자 설정(not null + unique 를 합쳐놓은 것- 다른 레코드와 구별하기 위해서 식별자를 설정하기 위하여 사용)

create table newbook(
	bookid number primary key,
    bookname varchar2(20) not null,
    publisher varchar2(20) null,
    price number
);
  • 연습 1- 도서번호에 중복된 레코드를 추가해보기
insert into newbook values(1, '재미있는 자바', '코스타미디어', 300000);
insert into newbook values(1, '재미있는 자바', '코스타미디어', 300000);

  • 연습 2- 도서번호에 null을 설정하여 레코드를 추가해보기
insert into newbook values(null, '재미있는 자바', '코스타미디어', 300000);


default : 생략하면 설정된 기본값을 사용함(맨 앞!)

create table newbook(
	bookid number primary key,
    bookname varchar2(20) not null,
    publisher varchar2(20) default '코스타 미디어',
    price number
);
insert into newbook values(1, '재미있는 자바', '한빛미디어', 5000);
insert into newbook values(2, '신나는 자바', default, 5000);
insert into newbook(bookid, bookname) values(3, '신나는 자바');
insert into newbook values(4, '신나는 간식', null, 5000);

 

check :  들어갈 수 있는 값의 조건을 설정

-> 칼럼의 값에 대하여 조건식을 설정하고자할 때 사용

-> 단, 값을 체크만 하는 것 뿐 null을 허용한다.

  • 연습 - 가격이 1000원 이상이어야 하도록 check 제약을 설정하여 테이블 생성
create table newbook(
	bookid number primary key,
    bookname varchar2(20) not null,
    publisher varchar2(20) default '코스타 미디어',
    price number check (price >= 1000)
);
insert into newbook values(1, '재미있는 자바', default, 1000);
insert into newbook values(2, '조금 자바', default, 150);

 

 

  • 연습 - 도서의 가격은 10000~50000로 제한, 출판사는 '삼성당', '코스타 미디어', '한빛미디어'로 제한
create table newbook(
	bookid number primary key,
    bookname varchar2(30) not null,
    publisher varchar2(30) check (publisher in ('삼성당', '코스타미디어', '한빛미디어')),
    price number check (price between 10000 and 50000)
);
  • 다음의 조건을 만족하는 newbook 테이블을 만들고 테스트 해본다.
    • 가격은 생략 불가. 10000~50000으로 제한
    • 출판사 생략 불가. 기본 값 '삼성당' , 값의 종류는 '삼성당', '코스타미디어', '대한미디어'로 제한
create table newbook(
	bookid number primary key,
    bookname varchar2(30) not null,
    publisher varchar2(30) 
    	default '삼성당'
        not null 
    	check (publisher in ('삼성당', '코스타미디어', '한빛미디어')), 
    price number check (price between 10000 and 50000) not null
);

insert into newbook(bookid, bookname, price) values(2, '재미있는 자바');

 

foreign key : 참조키 설정(부모와 자식의 관계를 설정)

부모 테이블과 관계를 설정하기 위하여 참조키를 설정하는 것

create table newbook(
	bookid number primary key,
    bookname varchar2(50) not null,
    publisher varchar2(20),
    price number
);
create table newcustomer(
	custid number primary key,
    name varchar2(30),
    addr varchar2(30),
    phone varchar2(30)
);
create table neworders(
	orderid number primary key,
    custid number,
    bookid number,
    saleprice number,
    orderdate date
);

 

  • 기존 DB table인스턴스들을  새 table 에 복사
select bookid, bookname, publisher, price from book;

insert into newbook select bookid, bookname, publisher, price from book;
  • customer 테이블의 모든 레코드를 조회하여  new customer insert하기
insert into newcustomer select * from customer;
insert into neworders values(1, 10, 20, 10000, sysdate);
  • 참조 키를 설정하지 않았다. 이렇게 테이블을 만들면 존재 하지 않는 도서나 고객의 주문이 있을 수 있다.

 

create table neworders(
	orderid number primary key,
    custid number references newcustomer(custid),
    bookid number references newbook(bookid),
    saleprice number,
    orderdate date
);
  • 부모 테이블이 먼저 있어야 자식 테이블이 참조할 수 있다.
  • 추가하려는 고객 번호 10번은 고객 번호가 없기 떄문에 오류가 나는 것이다. 
  • 참조하고 있는 자식테이블이 있으면 부모를 지울 수 없다.
  • 참조키를 설정할 때는 반드시 부모 테이블의 주식별자를 참조하도록 해야한다.

'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글

예제  (0) 2024.06.19
기본키와 참조키의 설정  (0) 2024.06.19
테이블 컬럼 추가하기 + 기존 내용 예제 + union, minus  (0) 2024.06.18
3개 이상 테이블 Outer join 하기  (2) 2024.06.17
셀프 조인  (0) 2024.06.12