alter 사용 > 기존 테이블의 구조를 변경
a. 기존 테이블에 데이터 없었을 경우 > 빈테이블 > 아무일 없음
b. 기존 테이블에 데이터 있었을 경우 > (손상이 될 수 있으니까)미리 데이터를 백업한다. > 수정 > 변수
- 서비스 운영 중 사용
테이블 삭제 > 테이블 생성
a. 기존 테이블에 데이터 없었을 경우 > 빈테이블
b. 기존 테이블에 데이터 있었을 경우 > 미리 데이터 백업 > 테이블 삭제 > 테이블 생성 > 데이터 복구
drop table tblEdit;
-- 테이블 생성
create table tblEdit(
seq number primary key,
data varchar2(20) not null
);
insert into tblEdit values (1, '마우스');
insert into tblEdit values (2, '키보드');
insert into tblEdit values (3, '모니터');
select * from tblEdit;
-- 1. 새로운 컬럼 추가하기 > price (가격) 컬럼 추가
-- alter table tblEdit add (추가 컬럼 정의);
alter table tblEdit
add (price number(5) null); -- null 컬럼 추가
-- null -> optional
-- not null -> mandatory
-- ORA-01758: table must be empty to add mandatory (NOT NULL) column
-- not null 컬럼을 만들려면 테이블을 비우거나, default값을 가져야한다.
-- alter table tblEdit
-- add(description varchar2(100) not null); -- not null 컬럼 추가
-- not null컬럼을 만드는 방법 1) default값을 갖는다.
alter table tblEdit
add(description varchar2(100) default '임시' not null); -- not null 컬럼 추가
-- 방법2) 테이블을 비우기 > 데이터를 잘 보관하고 있어야한다.(inset문 잘 보관하기)
delete from tblEdit; -- 데이터 지우기
alter table tblEdit
add(etc varchar2(100) not null); -- not null 컬럼 추가
select * from tblEdit;
-- 2. 기존 컬럼 삭제하기
-- alter table 테이블명 drop column 지울컬럼명;
alter table tblEdit
drop column etc;
alter table tblEdit
drop column description;
alter table tblEdit
drop column seq; -- 심각하게 고민...PK > 되도록 금지!!!
-- 3. 기존 컬럼의 정의 수정하기
select * from tblEdit;
-- 새로운 항목 추가
-- SQL 오류: ORA-00947: not enough values
insert into tblEdit values (4, '올해 새롭게 출시된 초경량 노트북');
-- 3.a 컬럼의 길이 수정하기(확장, 축소)
-- alter table tblEdit modify(컬럼 정의);
-- 확장
alter table tblEdit
modify (data varchar2(100));
-- 축소
alter table tblEdit
modify (data varchar2(50));
desc tblEdit;
-- 3.b 컬럼의 자료형 바꾸기
select * from tblEdit;
-- 숫자에서 문자로 (데이터는 지장이 없음)
-- ORA-01439: column to be modified must be empty to change datatype
delete from tblEdit; -- 테이블을 비워야함..!
alter table tblEdit
modify (seq varchar2(100));
desc tblEdit; -- 확인
-- 3.c 제약사항 바꾸기
-- alter table tblEdit modify (컬럼 정의 바꾸고싶은제약);
alter table tblEdit
modify (data varchar2(20) null);
desc tblEdit;
-- 3.d 컬럼명 바꾸기
alter table tblEdit
rename column data to name; -- data -> name으로 바꾸기
desc tblEdit;
alter table tblEdit
add (color varchar2(100) null);
select * from tblEdit;
-- check 제약 추가
alter table tblEdit
add constraint tbledit_color_ck check (color in ('red', 'yellow', 'blue'));
insert into tblEdit values (4, '핸드폰', 'yellow');
insert into tblEdit values (5, '태블릿', 'black');
-- 테이블 외부에 제약사항 추가하기★★ -> 가독성높음.
-- not null은 외부에서 넣는 것 불가.
create table tblEdit2(
seq number, -- PK넣기
data varchar2(30) not null, -- ck넣기
pseq number not null -- FK넣기
)
alter table tblEdit2
add constraint tbledit2_seq_pk primary key(seq);
alter table tblEdit2
add constraint tbledit2_data_ck check(length(data) >= 5);
alter table tblEdit2
add constraint tbledit2_pseq_fk foreign key(pseq) references tblEdit(seq);
alter table tblEdit2
drop constraint tbledit2_pseq_fk; -- 제약 삭제.
create user 계정명 identified by 암호;
alter user 계정명 indentified by 암호;
alter user 계정명 account lock;
alter user 계정명 account unlock;
drop user 계정명;
show user;
-- ORA-01031: insufficient privileges
-- 계정 생성 권한이 있어야 가능함..
create user hong identified by java1234; -- unlock상태
-- 계정 권한 조작
-- 1. grant 권한 to 계정
-- 2. revoke 권한 from 계정
-- 권한
-- 1. 권한
-- 2. 롤(Role) : 권한의 집합
-- grant create session to hong; -- 단일 권한 부여
grant connect, resource to hong; -- 롤(수많은 권한 집합), 가장 흔한 롤 부여
grant create view to hong; -- 뷰 만들 수 있는 권한 부여
show user;
select * from tabs;
DCL(TCL)
하나의 트랜잭션으로 묶여있는 DML들을 감시하다가, 일부 DML에서 문제가 발생하면 이전에 성공한 모든 DML을 어떻게 처
commit
rollback
savepoint
1.클라이언트가 접속한 직 후 > 세션 시작 직 후
drop table tblTrans;
create table tblTrans
as
select name, city, buseo, jikwi from tblInsa where buseo = '개발부';
-- 클라이언트 접속함(hr)
select * from tblTrans;
delete from tbltrans where name = '김신애'; -- 트랜잭션에 포함
select * from tbltrans;
rollback; -- 자신이 포함된 트랜잭션을 시작한 처음으로 돌아가라 (delete를 하기 전 시점으로 돌아감(그동안 했었던 작업들은 소멸됨))
-- 또 새로운 트랜잭션이 자동으로 시작된다.
select * from tbltrans; -- 김신애가 살아남.
delete from tbltrans where name = '임수봉';
update tblTrans set city = '서울' where name = '이순애';
insert into tblTrans values ('하하하', '서울', '개발부', '사원');
select * from tblTrans;
rollback;
select * from tblTrans;
delete from tbltrans where name = '임수봉';
select * from tblTrans;
-- 오라클 강제 종료
-- 오라클 재시작
select * from tblTrans; -- 삭제했던 임수봉이 삭제가 안되어있음. -> DB에 반영이 안되어있음
delete from tbltrans where name = '임수봉';
select * from tblTrans;
commit; -- 모든 작업을 데이타 베이스에 저장해라
select * from tblTrans; -- 임수봉 삭제되어있음.
-- 둘 다 한번 실행하면 취소 불가능.
rollback; -- 현재 트랜잭션의 모든 작업을 없었던 일로..
commit; -- 현재 트랜잭션의 모든 작업을 실제 데이터베이스(오라클)에 적용해라..
delete from tblTrans;
select * from tbltrans;
rollback;
select * from tbltrans;
-- 내가 한 실수를 되돌릴 수 있도록 하는 안전장치
-- 트랜잭션 선택
-- 1. 사용
-- 2. 미사용
select * from tblTrans;
delete from tbltrans;
rollback;
-- commit 발생 -> 4. DDL을 실행하는 경우(create, alter, drop)
create or replace view vwCountry
as
select * from tblCountry;
/*
commit, rollback 어떻게 제어?
1. 주기
- 어느 정도 자주 호출해야 하는가?
- 논리적 작업 단위(스스로 선택)
*/
-- savepoint
commit;
rollback;
delete from tbltrans where name = '김신애';
select * from tbltrans;
savepoint a;
delete from tbltrans where name = '황진이';
savepoint b;
delete from tbltrans where name = '홍길남';
-- 현재
rollback;
rollback to b;
rollback to a;
commit;
select * from tbltrans;