--default : 특정 칼럼에 초기치 부여 : 열값이 없는 형을 삽입할 경우 열에
null 값이 입력되는 것을 방지
create table aa(bun number(6), irum varchar2(20) default '종로구 숭인동');
insert into aa(bun, irum) values(1, '역삼1동');
insert into aa(bun) values(2); --디폴트를 준 '종로구 숭인동'이 null값을 채워준다.
select * from aa;
drop table aa;
-- sequence : number 칼럼에 대해 숫자를 자동증가
(sequence는 오라클에서만 쓴다. 다른데서는 auto increment)
create sequence my_bun increment by 1 start with 10 maxvalue 1000 cycle; -- 10부터 시작하고 1씩 증가, 1000까지, 그리고 minvalue, nocycle 도 있다.
--cycle : 1000이 넘어가면 다시 1로 초기화 된다.
select sequence_name, min_value, max_value, increment_by from user_sequences; --오라클이 가지고있는 명령을 가지고 만들것을 증명해보기 위한것. 몰라도 된다.
create table aa(bun number primary key, irum varchar2(10) not null);
insert into aa values(my_bun.nextval, '이겨라'); --user_sequence 적용
insert into aa values(my_bun.nextval, '신선해');
insert into aa values(my_bun.nextval, '사오정');
insert into aa values(my_bun.nextval, '손오공'); --sequence는 13까지 자동으로 줬기때문에 다음 차례인 14번을 기억한다.
insert into aa values(19, '저팔계'); -- 여기서 14번을 프로그래머가 주게되면
insert into aa values(my_bun.nextval, '손오공'); -- 에러 : 이번에 오는 sequence는 14번을 자동입력해주려고 하기때문에 에러
drop table student;
select * from aa;
alter sequence my_bun increment by 1; - -- sequence 수정
create table bb(no number primary key, name varchar2(10), weight number(3));
insert into bb values(1,'한사람', 50);
insert into bb values(my_bun.nextval,'한사람', 50); --sequence는 복수 개의 테이블에 적용
insert into bb values(23,'두사람', 53);
select * from bb;
insert into bb values(19,'두사람', my_bun.nextval); --sequence는 pk하고 관련 없다.
drop sequence code_bun; --sequence 삭제
------------ < sequence 연습문제 > ----------
create sequence code_bun increment by 1 start with 1 maxvalue 1000;
create table kyosu(kyo_code number(10) primary key, kyo_name varchar2(10), kyo_room number(4) check(kyo_room >= 100 and kyo_room<=500));
insert into kyosu values(11111, '가교수', 100);
insert into kyosu values(22222, '나교수', 200);
insert into kyosu values(33333, '다교수', 300);
insert into kyosu values(44444, '라교수', 400);
select * from kyosu;
create table kuamok(kuamok_code number(10) primary key, kuamok_name varchar2(20) unique, kyojae_name varchar2(20), damdang_kyosu number(10) references kyosu(kyo_code));
insert into kuamok values(code_bun.nextval, 'java', '자바의정석',11111);
insert into kuamok values(code_bun.nextval, 'oracle', '오라클',33333);
insert into kuamok values(code_bun.nextval, 'c++', 'c++열혈강의',33333);
insert into kuamok values(code_bun.nextval, 'linux', '리눅스마스터',44444);
select * from kuamok;
create table student(hakbun number(10) primary key, hak_name varchar2(10), sugang number(10), haknyeon number(1) default '1' check (haknyeon>=1 and haknyeon>=4) , constraint hak foreign key(sugang) references kuamok(kuamok_code));
insert into student(hakbun, hak_name, sugang) values(2013001, '가종현', 00004);
insert into student values(2013002, '나자균', 00003, 1);
insert into student(hakbun, hak_name,haknyeon, sugang) values(2013003, '다승원', 4, 00002);
insert into student(hakbun, hak_name, sugang) values(2013004, '라민철', 00004);
insert into student values(2013005, '마동수', 00003, 1);
insert into student values(2013006, '바슬람', 00002, 3);
select * from student;
---------------------------------------------문제 끝---------------------
create sequence my_seq; -- 이렇게 막아버리면 자동으로 1부터 1씩 증가하게 된다. 그리고 노사이클! 편하게갈때는 요렇게 가자.
drop sequence my_seq; --create로 만들었기때문에 drop으로 지워야한다.
--index(색인) : 검색(query, 질의) 속도 증진을 위해 특정 칼럼에게 색인을 붙일 수 있다.
-- 추가, 수정, 삭제가 빈번한 테이블의 경우에는 사용하지 않는 것이 바람직하다.
select * from aa;
create index ind_irum on aa(irum);
select index_name, table_name from user_indexes where table_name='AA';
alter index ind_irum rebuild; --자료의 추가, 수정, 삭제 후에 색인을 갱신한다.
drop index ind_irum; --색인 삭제
--테이블 관련 명령
create table 테이블명...
alter table 테이블명...
drop table 테이블명...
rename 옛이름 to 새이름;
select * from aa;
rename aa to newaa; --rename : 테이블 이름 바꾸기
select * from newaa;
desc newaa; --describe newaa; 오라클에서만 쓸 수 있는 명령어다.
rename newaa to aa;
--칼럼 관련 명령
--(1)칼럼추가
alter table aa add(job_id number(6) default 10); --칼럼이 추가되면서 디폴트 값인 10이다 채워진다.
alter table aa add(nai number(2)); -- 초기치를 안줬기때문에 새로만들어지는 nai는 모두 null이된다.
select * from aa;
--(2)칼럼수정
alter table aa modify(job_id number(2)); -- 에러 : (6) 자리의 데이터가 들어있기때문에 (2)로 축소해서 수정하게되면 에러가 난다. 불가.즉, 기존자료가 손상을 입을 수 있기 때문에.
alter table aa modify(job_id number(8)); -- 성공 : 크기의 확대만 가능하다. 그렇기때문에 (6) -> (8)로 수정 가능!
--(3)칼럼 이름 변경
alter table aa rename column job_id to job_no; -- 성공
--(4)칼럼 삭제
alter table aa drop (job_no); --성공 : 괄호가 있어야한다. 주의.
desc aa;
alter table aa set unused(nai); --unused : 칼럼의 비활성화. select로 검색해도 안나온다.
--비활성화 시켜두게 되면, 현재 사용자들은 그대로 사용이되고, 명령시점이후에 사용자들에겐 안보이게된다. 그리고 해당 칼럼을 사용하던 사람들이 사용하지 않을때 DB를 지우기 위함이다.
alter table aa drop unused columns; --unused된 칼럼들만 모두 지워준다.
--자료의 별도 보관 : backup. 단순한 backup 효과를 발휘 명령
cmd 창에서 exp, imp 한다.
export방법
cmd -> c:\ 으로 이동 -> exp scott/tiger tables=emp,dept, aa file=scott.dmp 친다.
drop table aa;
select * from aa;
import방법
cmd -> c:\ 으로 이동 -> imp scott/tiger tables=emp,dept, aa file=scott.dmp --단, 테이블이 존재하고있으면 import가 안된다. 없는 테이블만 import시켜준다.
select * from aa;
select * from tab; --select * from tab : oracle의 table 목록을 다 표시해주는 테이블
drop table aa; --삭제를 하게되면 완전삭제의 개념이 아니고, 오라클의 휴지통에 들어가 있는 개념이다.
----------------------밑에는 오라클에서만 먹히는 명령. 다른데서는 명령이 다름.-------------
show recyclebin; --휴지통 목록 확인(단 여기서는 실행이 안되고, 커멘드창에서 실행해야함.
flashback table aa to before drop; -- 휴대통에 테이블 복원.
purge recyclebin; -- 휴지통 비우기! 완전 삭제~~~~~~
drop table from aa; --테이블 한번에 완전 삭제!! 강력한 명령. 위험함
'# 데이터베이스 > 오라클' 카테고리의 다른 글
group by, inner join, left outer join, union,merge (0) | 2013.03.31 |
---|---|
Query(질의), select,order by,숫자 함수, 문자 함수, 내장 함수,Conditional Expression(조건 표현식) (0) | 2013.03.18 |
[DB연습 자료] 부서, 사원, 고객 table (2) | 2013.03.18 |
무결성 제약 조건(constraint), 기본키 제약조건, check, unique, foreign key, 참조키 (0) | 2013.03.18 |
SQL문의 기초, create table, insert into, update set, delete from (0) | 2013.03.18 |