アカデミー40日目-Oracle
2021.05.24
ex25_alter.sql
DDL
DML
表の変更、alter table
Alter>既存のテーブルの構造の変更
a.既存のテーブルにデータがない場合、>空白のテーブル>何もない
b.既存のテーブルにデータがある場合、>(破損する可能性がある)がデータを事前にバックアップします.>修正>変数(Modify>Variable)
-サービスを実行中
テーブルの削除>テーブルの作成(Delete Table>Create Table)
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.新しい列を追加
-- 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
勘定科目
ユーザーアカウントの作成
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
取引
取引命令
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;
Reference
この問題について(アカデミー40日目-Oracle), 我々は、より多くの情報をここで見つけました https://velog.io/@hi-dae-in/학원-40일차-Oracleテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol