학원 40일차 - Oracle
2021.05.24
ex25_alter.sql
DDL
- 객체 생성 : create
- 객체 삭제 : drop
- 객체 수정 : alter
DML
- 데이터 생성 : insert
- 데이터 삭제 : delete
- 데이터 수정 : update
테이블 수정하기, alter table
- 테이블 구조 수정하기 > 컬럼 정의 수정하기
- 되도록 테이블을 수정하는 상황이 발생하면 안된다(★★★★★★)
-
alter 사용 > 기존 테이블의 구조를 변경
a. 기존 테이블에 데이터 없었을 경우 > 빈테이블 > 아무일 없음
b. 기존 테이블에 데이터 있었을 경우 > (손상이 될 수 있으니까)미리 데이터를 백업한다. > 수정 > 변수
- 서비스 운영 중 사용
-
테이블 삭제 > 테이블 생성
a. 기존 테이블에 데이터 없었을 경우 > 빈테이블
b. 기존 테이블에 데이터 있었을 경우 > 미리 데이터 백업 > 테이블 삭제 > 테이블 생성 > 데이터 복구
- 서비스 운영 중 사용
- 개발 중에 사용
테이블 수정하기
- 새로운 컬럼 추가하기 : 무난 + 고민(X)
- 기존 컬럼 삭제하기 : 무난 + 고민(데이터 삭제, FK - 테이블간의 관계)
- 기존 컬럼의 정의 수정하기: 고민 많이 할 것!! (★★★)
- 컬럼명 바꾸기 : 무난 + 고민(기존 데이터x, 기존 쿼리..)
- 컬럼의 길이 바꾸기 : 무난 + 고민(기존 데이터의 길이)
- 컬럼의 자료형 바꾸기 : 무난 + 고민(기존 데이터)
- 컬럼의 제약사항 바꾸기 : 무난 + 고민(기존 데이터)
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;
alter 사용 > 기존 테이블의 구조를 변경
a. 기존 테이블에 데이터 없었을 경우 > 빈테이블 > 아무일 없음
b. 기존 테이블에 데이터 있었을 경우 > (손상이 될 수 있으니까)미리 데이터를 백업한다. > 수정 > 변수
- 서비스 운영 중 사용
테이블 삭제 > 테이블 생성
a. 기존 테이블에 데이터 없었을 경우 > 빈테이블
b. 기존 테이블에 데이터 있었을 경우 > 미리 데이터 백업 > 테이블 삭제 > 테이블 생성 > 데이터 복구
- 서비스 운영 중 사용
- 개발 중에 사용
- 컬럼명 바꾸기 : 무난 + 고민(기존 데이터x, 기존 쿼리..)
- 컬럼의 길이 바꾸기 : 무난 + 고민(기존 데이터의 길이)
- 컬럼의 자료형 바꾸기 : 무난 + 고민(기존 데이터)
- 컬럼의 제약사항 바꾸기 : 무난 + 고민(기존 데이터)
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. 새로운 컬럼 추가하기
-- 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. 기존 컬럼 삭제하기
-- 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. 기존 컬럼의 정의 수정하기
-- 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; -- 제약 삭제.
ex26_account.sql
계정
- DCL
- 계정 생성
- 리소스 접근 권한 제어
사용자 계정 생성하기
- 시스템 권한을 가지고 있는 계정만 할 수 있다.
- 관리자만 가능(sys, system, 관리자 권한을 부여받은 계정 등)
- 계정 생성 권한을 가지는 일반 계정
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;
ex27_transaction.sql
트랜잭션, transaction
- 트랜잭션 개념
- 오라클에서 트랜잭션을 처리(조작)하는 방법
- 오라클에서 발생하는 1개 이상의 명령들을 하나의 논리 집합으로 묶어 놓은 단위 > (실행된)명령어들의 집합 > 통제(제어)
- 트랜잭션에 포함되는 명령어 > insert, update, delete > 테이블 조작(변경)
트랜잭션 명령어
-
DCL(TCL)
-
하나의 트랜잭션으로 묶여있는 DML들을 감시하다가, 일부 DML에서 문제가 발생하면 이전에 성공한 모든 DML을 어떻게 처
-
commit
-
rollback
-
savepoint
-
새로운 트랜잭션이 시작하는 경우
1.클라이언트가 접속한 직 후 > 세션 시작 직 후
- commit 실행 직 후
- rollback 실행 직 후
현재 트랜잭션이 종료되는 경우
- commit 실행 직 후
- rollback 실행 직 후
- 클라이언트가 접속을 종료하는 경우
- DDL을 실행하는 경우(create, alter, drop) -> 자동으로 commit이 호출된다. (Auto commit)
- 구조를 바꾸는 작업이라 데이터를 완전 처리하는 작업을 내장
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;
Author And Source
이 문제에 관하여(학원 40일차 - Oracle), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hi-dae-in/학원-40일차-Oracle저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)