アカデミー40日目-Oracle


2021.05.24


ex25_alter.sql


DDL

  • オブジェクトの作成:create
  • 削除
  • オブジェクト:drop
  • 修正オブジェクト
  • :alter
  • DML

  • データの生成:insert
  • データ消去:delete
  • データ修正:update
  • 表の変更、alter table

  • 表構造の変更>列定義の変更
  • なるべくテーブルを修正しないようにする(★★★★★)

  • Alter>既存のテーブルの構造の変更
    a.既存のテーブルにデータがない場合、>空白のテーブル>何もない
    b.既存のテーブルにデータがある場合、>(破損する可能性がある)がデータを事前にバックアップします.>修正>変数(Modify>Variable)
    -サービスを実行中

  • テーブルの削除>テーブルの作成(Delete Table>Create Table)
    a.既存のテーブルにデータがない場合、>空のテーブル
    b.既存のテーブルにデータがある場合、>予備データ>テーブルの削除>テーブルの作成>データの復元
  • 運転で使用する
  • 開発で使用する
  • 表の変更


    追加コラム
  • :困難なし+悩み(X)
  • 削除
  • 既存列:
  • 既存コラムの定義を変更:よく考えてください.(★★★)
  • 改名:楽+苦悩(既存データ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
  • アカウント
  • の作成
  • リソースアクセス制御
  • ユーザーアカウントの作成

  • のシステム権限を持つアカウントしか使用できません.
  • 管理者(システム、システム、認可されたアカウントを含む)
  • のみ
  • アカウントの作成権限を持つ一般的なアカウント
  • 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


    取引

  • トランザクション概念
  • トランザクションの処理方法
  • oracleからの1つ以上のコマンドを1つの論理セット内のユニット>(実行済み)コマンドのセット>制御(制御済み)
  • に組み合わせる.
  • トランザクションに含まれるコマンド>挿入、更新、削除>テーブル操作(変更)
  • 取引命令


  • DCL(TCL)

  • トランザクションDMLを監視し、一部のDMLに問題が発生した場合、以前に成功したすべてのDMLをどのように処理しますか?

  • commit

  • rollback

  • savepoint
  • 新しいトランザクションの開始時


    1.クライアント接続後>セッション開始後
  • commit実行後
  • ロールバック運転後
  • 現在の取引が終了した場合

  • commit実行後
  • ロールバック運転後
  • クライアントが接続を閉じるときは
  • である.
  • 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;