[Oracle] 오라클 #10, DDL, DML
- Database/Oracle
- 2019. 2. 21. 21:25
DML
- 데이터 조작어(select, insert, update, delete)
- select(DQL : Data Query Language)
DDL
- 데이터 정의어
- 객체(DB Object)를 생성한다
- DB Object : 테이블, 뷰, 인덱스, 트리거, 프로시저, 제약사항 등...
- create, alter, drop
테이블 생성하기(=텍스트 파일 구조 만들기)
create table 테이블명
(
컬럼 정의,
컬럼 정의,
컬럼명 자료형(길이) NULL표기 제약사항
);
ex)
create table tblTest
(
num number(3),
txt varchar2(10),
regdate date
);
insert into tblTest(num,txt,regdate) values(3,'홍길동','2018-08-24');
insert into tblTest(num,txt,regdate) values(3,'홍길동',sysdate);
create 문 내부 순서
- > 컬럼명 자료형(길이) NULL표기 제약사항
제약사항, Constraint
- 해당 컬럼값에 대한 조건(규제) > 조건을 만족하지 못하면 데이터를 못 넣는다. > 유효성 검사
- 데이터 베이스 무결성 보장 - 무결성 제약조건
1. not null
- 반드시 값을 가져야 한다(필수값)
ex )
create table tblMemo
(
seq number not null, --메모 번호 + 필수입력값(Required)
name varchar2(20) null, --작성자 + 선택입력값(Optional)
memo varchar2(1000) not null, --메모내용 + 필수입력값
regdate date null --작성시간 + 선택
);
insert into tblMemo(seq, name, memo, regdate) values ('3', '홍길동','오라클 너무재밌어.',sysdate);
insert into tblMemo(seq, name, memo, regdate) values ('4', null,'우와앙',null);
insert into tblMemo(seq, name, memo, regdate) values ('5', '홍길동',null,'2016-07-27'); --ORA-01400: cannot insert NULL into ("HR"."TBLMEMO"."MEMO")
2. primary key(PK,기본키)
- 테이블 내에서 모든 컬럼들 중에 대표가 되는 컬럼 > 행과 행을 구분하는 수단으로 사용.
- 테이블내에서 행을 구분하기 위한 고유 식별자
- 1개의 테이블 내에는 반드시 PK가 존재한다.
- PK는 보통 1개의 컬럼으로 구성 + 가끔씩 2개이상의 컬럼으로 PK를 구성하는 경우도 있음.
- PK는 따로 명시하지 않아도 자동으로 not null이 적용된다.
- PK는 따로 명시하지 않아도 Duplicate가 적용된다. > unique가 적용된다. = 중보값을 가질 수 없다
- PK = not null + unique
ex)
create table tblMemo
(
seq number primary key, --테이블의 행 구분 고유 식별자 + not null + 중복 불가.
name varchar2(20) null,
memo varchar2(1000) not null,
regdate date null
);
3. unique
- 해당 컬럼이 테이블 내에서 유일값이어야 한다.
- null을 가질 수 있다.
- 절대로 unique를 식별자로 사용해서는 안된다.(null이 있어서)
ex)
create table tblMemo
(
seq number primary key, --테이블의 행 구분 고유 식별자 + not null + 중복 불가.
name varchar2(20) unique,
memo varchar2(1000) not null,
regdate date null
);
4. check
- 열거형,범위비교 등의 제약(사용자 정의형)
ex)
create table tblMemo
(
seq number primary key,
name varchar2(20) not null,
memo varchar2(1000) not null,
--regdate date not null,
--color varchar2(30) not null, -->red, yellow, Blue
--page number not null --1~9
--color varchar2(30)check(color ='red' or color ='yellow'or color='blue') not null,
color varchar2(30) check (color in ('red','yellow','blue')) not null,
page number check(page between 1 and 9) not null,
regdate date check(regdate between to_date('2018-01-01','yyyy-mm-dd') and to_date('2018-12-31','yyyy-mm-dd')) not null,
regdate date check(to_char(regdate,'hh24') between 0 and 11) not null,
regdate date check(to_char(regdate,'d') between 2 and 6) not null
);
insert into tblMemo(seq, name, memo, regdate,color,page) values (1,'홍길동','홍길동이쓰고있다.',sysdate,'red',3);
insert into tblMemo(seq, name, memo, regdate,color,page) values (2,'고길동','고길동이쓰고있다.',sysdate,'white',100); --ORA-02290: check constraint (HR.SYS_C007100) violated
5. default
- 컬럼 기본값
- 해당 컬럼값에 값을 넣지 않으면 null을 입력하는 대신 자동으로 미리 준비된 기본값을 넣는다.
create table tblMemo
(
seq number primary key, --테이블의 행 구분 고유 식별자 + not null + 중복 불가.
name varchar2(20) default '익명' null,
memo varchar2(1000) not null,
regdate date not null
);
insert into tblMemo(seq, name, memo, regdate) values ('1','하하하','낑',sysdate);
insert into tblMemo(seq, memo, regdate) values ('2','낑',sysdate);
create table tblMemo(
seq number primary key, --메모번호(PK)
name varchar2(30) not null,
memo varchar2(1000) check(length(memo) >= 10) not null, --체크제약.
regdate date default sysdate not null, --default 제약 기본값.
color varchar2(10) unique --유일값, 중복값 허용 안함(null은 중복가능)
);
drop table tblMemo;
select * from tblMemo;
insert into tblMemo(seq,name,memo,regdate,color)
values('1','홍길동','안녕하세요. 홍길동입니다.',sysdate ,'red');
insert into tblMemo(seq,name,memo,regdate,color)
values('2','호호호','테스트.',sysdate ,'yellow'); --체크에러 :ORA-02290: check constraint (HR.SYS_C007132) violated
insert into tblMemo(seq,name,memo,regdate,color)
values('3','홍길동','테스트테스트테스트테스',sysdate ,'yellow');
insert into tblMemo(seq,name,memo,regdate,color)
values('4','하하하','테스트테스트테스트테스',sysdate ,null); --유니크에러 : ORA-00001: unique constraint (HR.SYS_C007134) violated
insert into tblMemo(seq,name,memo,regdate,color)
values('5','하하하','테스트테스트테스트테스',null ,null); --다른 더 배워야할 것이 있다고함.
제약사항을 만드는 방법
1. 컬럼수준에서 만드는 방법(여태했던 방식)
- 컬럼을 정의할 때 같이 제약을 추가하는 방법
- 1:1제약(컬럼1개 : 제약1개)
- 컬럼명 자료형 제약사항
- 컬럼명 자료형 [constraint 제약명] 제약사항
2. 테이블 수준에서 만드는 방법
- pk,fk,check,uq : 가능
- nn(낫널),default : 불가능
a. create
b. alter//x
create table tblMemo(
--seq number primary key,--컬럼수준 제약
--seq number constraint aaa primary key 제약명이 aaa는 좀 아님
seq number constraint tblmemo_seq_pk primary key, -- 현재테이블명_컬럼명_제약사항
-- 제약이름 30자 넘기지 않도록 주의****
memo varchar2(1000),
constraint tblmemo_memo_ck check(length(memo)>10) not null
);
insert into tblMemo(seq) values(1);-- 성공.
insert into tblMemo(seq) values(1); --ORA-00001: unique constraint (HR.AAA) violated
insert into tblMemo(seq) values(1);-- 성공.
insert into tblMemo(seq) values(1); --ORA-00001: unique constraint (HR.TBLMEMO_SEQ_PK) violated
insert into tblMemo(seq,memo) values(1,'세글자'); --ORA-02290: check constraint (HR.TBLMEMO_MEMO_CK) violated
테이블 수준에서 제약사항 관리하기.
create table tblMemo(
seq number,
memo varchar2(1000) not null,
color varchar2(30),
page number(1),
---------------------------순수한 컬럼정의
---------------------------제약사항만을 만들때 따로 정의(테이블수준 정의)
constraint tblMemo_seq_pk primary key(seq),
constraint tblMemo_color_ck check (color in('black','white')),
constraint tblMemo_page_ck check(page between 1 and 9)
--가독성 관련(관련된 코드끼리 구분)
--not null은 컬럼수준에서 밖에 정의를 못한다.(테이블 수준에서는 불가능)
--constraint tblMemo_regdate_default //디폴트 제약조건 --테이블수준에서는 없음
--constraint tblMemo_seq_uq unique(seq), //유티크 제약조건
);
'Database > Oracle' 카테고리의 다른 글
[Oracle] 오라클 #12, insert 삽입구문(특이한 insert 구문) (4) | 2019.02.25 |
---|---|
[Oracle] 오라클 #11, 시퀀스(Sequence) (0) | 2019.02.23 |
[Oracle] 오라클 #9, Casting, 형변환함수 (0) | 2019.02.20 |
[Oracle] 오라클 #8, 오라클 함수(문자열 함수) (0) | 2019.02.16 |
[Oracle] 오라클 #7, 숫자함수와 날짜함수(feat.dual 테이블) (0) | 2019.02.16 |