뇨내

[Oracle-SQL Developer] DDL : Data Definition Language 본문

Oracle/DDL + DML + DCL

[Oracle-SQL Developer] DDL : Data Definition Language

삐옥 2021. 11. 20. 22:27

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

DDL(Data Definition Language)

 

- 데이터 정의어
- 관리자 베이스 담당자가 사용
- 데이터베이스 객체를 생성, 수정, 삭제한다.
- 데이터베이스 객체 > 테이블, 뷰, 인덱스, 트리거, 프로시저, 제약 사항 등.. 

- AUTO COMMIT

- CREATE, ALTER, DROP, RENAME

 

테이블 생성하기 > 스키마 정의하기 > 속성(컬럼) 정의하기 > 속성(컬럼) 성격(이름)과 도메인(자료형)을 정의하기

 

 

 


 

 

 

CREATE

 

CTREATE TABLE 테이블명
(
    컬럼 정의,
    컬럼 정의,
    컬럼 정의,
    ...
    컬럼명 자료형(길이) NULL표기 제약사항
);

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 메모 테이블
create table tblMemo
(
    --컬럼명 자료형(길이) NULL표기 제약사항
    seq number(3),              -- 메모번호
    name varchar2(30),          -- 작성자
    memo varchar2(1000),        -- 메모 내용
    regdate date                -- 작성 날짜
);
 
-- 테이블 잘 생성되었는지 확인
select * from tblMemo;
 
--tabs: 시스템 테이블. 현재 계정(HR)이 소유하고 있는 모든 테이블 목록 
select * from tabs; 
cs

 

 


 

 

 

ALTER

 

- 추가

ALTER TABLE 테이블 이름 ADD 속성/이름 데이터타입 [DEFAULT]; 

 

- 변경

ALTER TABLE 테이블 이름 ALTER 속성/이름 데이터타입 [SET DEFAULT];

 

- 삭제

ALTER TABLE 테이블 이름 DROP 속성/이름 데이터타입 [CASACADE | RESTRICT];

 

 


 

 

 

RENAME

 

ALTER TABE 테이블명

RENAME COLUMN 변경 전 컬럼명 TO 변경 후 컬럼명;

 

 


 

 

 

DROP

 

ALTER TABLE 테이블명;

ALTER TABLE 테이블명 DROP COLUMN 삭제 할 컬럼명;

 


 

 

 

 

 

 

 

연습

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
drop table tblMemo;
delete from tblMemo;
 
-- 데이터 추가하기 
insert into 테이블명(컬럼리스트) values (값리스트);
 
insert into tblMemo(seq, name, memo, regdate) values (1'홍길동''메모입니다.', sysdate);
insert into tblMemo(seq, name, memo, regdate) values (1'홍길동''메모입니다.', sysdate);
            -- > 데이터 중복발생
insert into tblMemo(seq, name, memo, regdate) values (2nullnullnull); -- 3개는 값이 無
insert into tblMemo(seq, name, memo, regdate) values (nullnullnullnull); -- 절대 생성 금지!
insert into tblMemo(seq, name, memo, regdate) values (3'아무개''공부할것''2021-11-14'); -- 암시적 형변환
insert into tblMemo(seq, name, memo, regdate) 
    values (4'호호호''메모장', to_date('2021-11-13 14:05:30''yyyy-mm-dd hh24:mi:ss'));
 
 
select * from tblMemo;
 
select count(*from tblMemo;
 
 
--처음 넣은 메모만 가져오시오.
select * from tblMemo where seq = 1;
select * from tblMemo where name = '홍길동';
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-- 메모 테이블
drop table tblMemo;
 
create table tblMemo
(
    seq number(3not null,         --메모번호(NN)              
    name varchar2(30null,         -- = null > 값을 안넣어도 된다. 
    memo varchar2(1000not null,   --메모내용(NN)     
    regdate date null               -- = null을 허용하겠다.                
);
 
 
select * from tblMemo;
 
 
insert into tblMemo(seq, name, memo, regdate) values (1'홍길동''메모입니다.', sysdate);
insert into tblMemo(seq, name, memo, regdate) values (null'홍길동''메모입니다.', sysdate);
--ORA-01400: cannot insert NULL into ("HR"."TBLMEMO"."SEQ")
-- = HR이 소유하고있는 tblmeomo 테이블에 seq값에 null을 넣을 수 없습니다.
 
insert into tblMemo(seq, name, memo, regdate) values (2'홍길동''메모입니다.', sysdate);
insert into tblMemo(seq, name, memo, regdate) values (3'홍길동'null, sysdate); --에러
insert into tblMemo(seq, name, memo, regdate) values (3'홍길동'"", sysdate);
--SQl에서는 빈문자열("")도 null로 취급한다.
-- "" : 빈문자열 = null
 
insert into tblMemo(seq, name, memo, regdate) values (3null'내용'null);
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- 메모 테이블
drop table tblMemo;
 
create table tblMemo
(
    seq number(3primary key,          -- 메모번호(PK)
    name varchar2(30null,          
    memo varchar2(1000not null,       
    regdate date null                
);
 
insert into tblMemo(seq, name, memo, regdate) values (1'홍길동''메모입니다.', sysdate);
insert into tblMemo(seq, name, memo, regdate) values (1'아무개''테스트~.', sysdate);
-- ORA-00001: unique constraint (HR.SYS_C007095) violated
-- = 유니크(PK는 유니크라는 제약사항을 포함한다.)한 상황을 위반했습니다.
 
insert into tblMemo(seq, name, memo, regdate) values (2'아무개''테스트~.', sysdate);
insert into tblMemo(seq, name, memo, regdate) values (123'아무개''테스트~.', sysdate);
 
-- ORA-01400: cannot insert NULL into ("HR"."TBLMEMO"."SEQ")
insert into tblMemo(seq, name, memo, regdate) values (null'아무개''테스트~.', sysdate);
 
select * from tblMemo;
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- 메모 테이블
drop table tblMemo;
 
create table tblMemo
(
    seq number(3primary key,          -- 메모번호(PK)
    name varchar2(30unique,           -- 작성자(유일한 값 + NULL 허용)          
    memo varchar2(1000not null,       
    regdate date null                
);
 
insert into tblMemo(seq, name, memo, regdate) values (1'아무개''테스트~.', sysdate);
insert into tblMemo(seq, name, memo, regdate) values (2'아무개''테스트~.', sysdate);
--ORA-00001: unique constraint (HR.SYS_C007098) violated
insert into tblMemo(seq, name, memo, regdate) values (3null'테스트~.', sysdate);
insert into tblMemo(seq, name, memo, regdate) values (4null'테스트~.', sysdate);
 
 
select * from tblMemo;
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-- 메모 테이블
drop table tblMemo;
 
create table tblMemo
(
    seq number(3primary key,          -- 메모번호(PK)
    name varchar2(30),                     
    memo varchar2(1000),       
    regdate date,
    --lv number(1) not null check(조건)  -> 중요도(1~5) where lv >=1 and lu <=5
    --lv number(1) not null check(lv >= 1 and lv <= 5)              
    --lv number(1) not null chech (lv between 1 and 5)
    --color varchar2(30) check(color = '빨강' or color = '파랑' or color = '노랑')     -- 메모 색상(빨강, 파랑, 노랑)
    --color varchar2(30) check(color in ('빨강', '파랑', '노랑'))     
    --jumin varchar2(13) check (substr(jumin, 7, 1) = '-')
 
 
);
 
insert into tblMemo(seq, name, memo, regdate, lv) values (1'아무개''테스트~.', sysdate, 1);
 
-- ORA-02290: check constraint (HR.SYS_C007062) violated
insert into tblMemo(seq, name, memo, regdate, lv) values (2'아무개''테스트~.', sysdate, 6);
 
select * from tblMemo;
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- 메모 테이블
drop table tblMemo;
 
create table tblMemo
(
    seq number(3primary key,          -- 메모번호(PK)
    name varchar2(30default '익명',                     
    memo varchar2(1000),       
    regdate date default sysdate 
);
select * from tblMemo;
 
-- ORA-00001: unique constraint (HR.SYS_C007064) violated
-- ORA-00001: unique constraint (HR.SYS_C007043) violated
-- ORA-00001: unique constraint (HR.SYS_C007234) violated
insert into tblMemo(seq, name, memo, regdate) values (1'아무개''테스트~.', sysdate);
insert into tblMemo(seq, memo) values (2'테스트~.'); --name, regdate 안넣음
 
select * from tblMemo; -- 2    익명    테스트~.    21/11/15
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 메모 테이블
drop table tblMemo;
 
create table tblMemo
(
    --tblmemo_seq_pk
    --tblmemo_name_uq
    --tblmemo_color_ck
    
    seq number(3constraint tblmemo_seq_pk primary key,                 --메모번호(PK)
    name varchar2(30),                 
    memo varchar2(1000),
    regdate date
);
 
select * from tblMemo;
 
 
insert into tblMemo(seq, name, memo, regdate) values (1'아무개''테스트~.', sysdate);
-- ORA-00001: unique constraint (HR.TBLMEMO_SEQ_PK) violated
-- ORA-00001: unique constraint (HR.SYS_C007102) violated (위에 에러, 차이보기!)
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- 메모 테이블
drop table tblMemo;
 
create table tblMemo
(
    --컬럼 정의
    seq number(3),
    name varchar2(30),                 
    memo varchar2(1000),
    regdate date,
    
    --제약사항 정의
    constraint tblmemo_seq_pk primary key(seq),
    constraint tblmemo_name_uq unique(name),
    constraint tblmemo_regdate_ck check(to_number(to_char(regdate, 'hh24')) between 9 and 15)
);
 
insert into tblMemo(seq, name, memo, regdate) values (1'아무개''테스트~.', sysdate);
insert into tblMemo(seq, name, memo, regdate) values (1'아무개''테스트~.', sysdate);
insert into tblMemo(seq, name, memo, regdate) values (2'아무개''테스트~.', sysdate);
insert into tblMemo(seq, name, memo, regdate) values (2'호호호''테스트~.', sysdate);
 
select to_char(regdate, 'yyyy-mm-dd hh24:mi:ss'from tblMemo;
cs

 

 

 

 

 


 

Comments