<DDL>
Table을 생성, 구조 변경, 테이블 제거, 데이터만 제거하는 명령어입니다.
Transaction 처리는 불가능하며, auto commit됩니다.
<DDL 종류>
(1) Create : 테이블 생성
(2) Alter : 테이블 수정
(3) Drop : 테이블을 제거(테이블 제거 or 테이블에 저장된 데이터 삭제)
(4) Truncate : 테이블의 모든 데이터 삭제 (테이블은 삭제 x)
<제약조건>
제약조건이란, 테이블의 컬럼에 들어갈 값들에 조건을 설정해주는 것이다.
예를 들면, 아래 테이블에서 순번 테이블은 필수로 들어가야할 값이기 때문에 NULL 값이 들어가면 안된다는 제약 조건을 걸어주어야 한다. (not null)
또한, ID는 다른 사람의 ID와 중복되면 안되기 때문에, 유일 값으로 지정해주어야 한다. (unique)
순번 | 이름 | ID | 성별 | 가입 날짜 | |
1 | 최수지 | kim5 | 여성 | abc@gmail.com | 2020-12-31 |
2 | 김재현 | wonder | 남성 | ww@gmail.com | 2021-01-03 |
3 | 이석현 | superact | 남성 | a@gmail.com | 2021-03-01 |
4 | 조나은 | fly | 여성 | 32a@gmail.com | 2020-12-22 |
... | ... | ... | ... | ... | ... |
9999 | 장현준 | jang | 남성 | jang@gmail.com | 2021-01-28 |
<제약조건의 종류>
(1) primary key
테이블 당 한번만 등록이 가능하다. 레코드르 대표하는 컬럼을 기본키로 지정.
기본키 설정시, not null & unique가 자동으로 설정됨
(2) not null
반드시 값을 저장해야 함
(3) unique
중복 불가
(4) check
값의 범위 지정 가능함
(5) foreign key
참조키를 연결하고 있는 컬럼을 외래키라 함. 데이터의 무결성을 유지. 외래키 사용시 업무 유지 보수하기가 까다로워짐
- on delete cascade : 부모 테이블의 레코드가 삭제될 때, 참조하고 있는 자손 테이블의 레코드도 삭제 됨
- on delete set null : 부모 테이블의 레코드가 삭제될 때, 참조하고 있는 자손 테이블의 외래키를 null로 저장
<예제 1>
(1) Create, 제약조건 없는 테이블 생성하기
ㄴ 테이블 이름 practice1, 숫자 타입(사이즈4)의 no 컬럼, 문자 타입(사이즈20)의 name 컬럼 생성하기
Create table practice1
(
no number(4),
name varchar2(20)
)
;

(2) insert into를 이용하여 3행정도 추가하기
insert into practice1 values(1,'유재석') ;
insert into practice1 values(1,'이석훈') ;
insert into practice1 values(1,'김연경') ;

(3) Alter를 이용하여 No는 제약조건 이름 prac_no_nn, 제약 조건 종류 not null이라는,
name 컬럼에는 제약조건 이름 prac_name_uni, 제약 조건 종류 unique라는 제약조건을 추가하기
alter table practice1 add constraint prac1_no_nn not null(no) ;
ㄴ 오류발생 why? 제약조건 없을시 null 허용 제약조건이 설정되어 있는 것인데, 이미 제약조건이 있는 컬럼은 제약조건 add가 아니라 modify를 통하여 수정해줘야한다.
a. alter table practice1 modify(no constraint prac1_no_nn not null);
b. alter table practice1 add constraint prac1_name_uniq unique(name);
** 혹시 제약 조건을 삭제하고 싶다면,
alter table practice1 drop constraint prac1_no_nn;
alter table practice1 drop constraint prac1_name_uniq;
ㄴ 위의 제약조건이 잘 생성되었는지 조회하기
select constraint_name, constraint_type <- 제약조건 이름, 제약조건 타입
from user_constraints <- 데이터베이스 내의 제약조건 불러오기
where lower(table_name) = 'practice1'; <- practice1의 제약 조건만 가져오는 조건 설정

<예제 2>
애초에 제약 조건을 걸어서 테이블 생성하기
(1) 생성
create table practice2
(
no number(3) constraint prac2_no_pk primary key,
name varchar2(20) constraint prac2_name_uniq not null
)
;
(2) 테이블 조회
desc practice2;

(3) 제약조건 조회
select constraint_name, constraint_type
from user_constraints
where lower(table_name)= 'practice2';

'SQL' 카테고리의 다른 글
SQL [19] - Sequence (0) | 2021.05.10 |
---|---|
SQL [18] - 가상 테이블 View (0) | 2021.05.09 |
SQL [16] - Delete (0) | 2021.05.05 |
SQL [15] - Update (0) | 2021.05.05 |
SQL [14] - Insert (0) | 2021.05.03 |