21.2.15(月)DB/DDL(2)


2. DDL(DATA DEFINITION LANGUAGE)


:オブジェクトの新規作成、変更、削除の構文(データ定義言語)

1) ALTER


:オブジェクト構造の構文の変更
<制約の修正>
ALTER TABLEテーブル名の内容を変更する.
-変更する内容-
(1)追加/変更/削除
(2)コンストレイントの追加/削除はできません->修正(修正する場合は削除後に追加)
(3)テーブル名/カラム名/制約名の変更

(2)-1制約の追加


テーブルの作成後に制約を追加(ALTER TABLEテーブル名XXXX)

(1)PRIMARY KEY:ADD PRIMARY KEY(コラム名);


(2)FOREGN KEY:ADD FOREGN KEYが参照するテーブル名(参照するカラム名);


(3)UNIQUE:ADD UNIQUE(列名);


(4)CHECK:ADD CHECK(列の条件);


(5)NOT NULL:MODIFY列名NOT NULL(またはNULL);


独自の制約名を付ける場合は、[CONTRAINT制約名]制約
注意:制約名は現在の勘定科目で一意である必要があります.
(2)-2制約の削除
--DEPT COPYテーブル
--PRIMARY KEY制約をDEPT ID列に追加
--UNIQUE制約をDEPT TITLE列に追加
--NOT NULL制約をLNAME列に追加
ALTER TABLE DEPT_COPY
ADD CONSTRAINT DCOPY_PK PRIMARY KEY(DEPT_ID)
ADD CONSTRAINT DCOPY_UQ UNIQUE(DEPT_TITLE)
MODIFY LNAME CONSTRAINT DCOPY_NN NOT NULL;
/*
2)制約の削除
PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK : DROP CONSTRAINT 제약조건명
NOT NULL : MODIFY 컬럼명 NULL  
*/
--DCOPY PK制約のクリア
ALTER TABLE DEPT_COPY DROP CONSTRAINT DCOPY_PK;
--DCOPY UQ制約のクリア
--LNAME制約NOT NULL=>NULLをクリア
ALTER TABLE DEPT_COPY
DROP CONSTRAINT DCOPY_UQ
MODIFY LNAME NULL;
--3)カラム名/制約名/テーブル名の変更(RENAME)
--3 1)列名の変更:RENAME COLUMN既存列名TO変更する列名
ALTER TABLE DEPT_COPY RENAME COLUMN DEPT_TITLE TO DEPT_NAME;
--32)制約名の変更:RENAME CONTRAINT既存制約名TO変更する制約名
ALTER TABLE DEPT_COPY RENAME CONSTRAINT SYS
--3)表名の変更:変更する表名はRENAME(既存の表名)TO
ALTER TABLE DEPT_COPY RENAME TO DEPT_TEST;
/*
## 2) DROP
: 객체를 삭제하는 구문

<제약조건 수정>
DROP TABLE 테이블명 삭제할 내용;
**※ 단, 어딘가에서 참조되고 있는 부모테이블들은 함부로 삭제 안 됨!**
만약 삭제하고 싶다면?
1. 자식테이블 먼저 삭제한 후 부모테이블 삭제하는 방법
DROP TABLE 자식테이블;
DROP TABLE 부모테이블;

2. 부모테이블만 삭제하는데 맞물려있는 제약조건 함께 삭제하는 방법
부모테이블만 삭제하고 싶음
DROP TALBE 부모테이블 CASCADE CONSTRAINT;

2) DROP


:オブジェクトの構文を削除する
<制約の修正>
DROP TABLEテーブル名の内容を削除します.
※ただし、どこかで参照している親テーブルは勝手に削除できません!

3. DCL(DATA CONTROL LANGUAGE)


:データ制御言語
アカウントがシステム権限またはオブジェクトアクセス権を付与または回収する言語

1)システム権限


:特定のデータベースへのアクセス権
<タイプ>
  • CREATE SESSION:アカウントへのアクセス権限
  • CREATE TABLE:テーブルを作成する権限
  • CREATE VIEW:ビューを作成する権限
  • CREATE SEQUENCE:シーケンスを生成する権限
  • CREATE USER:アカウントの作成権限
  • ......
  • [表現]
    GRANT権限1、権限2、...TOアカウント名

  • (1)SAMPLEアカウントの作成CREATE USER SAMPLE IDENTIFIED BY SAMPLE;

  • (2)CREATE SESSIONのSAMPLEアカウントへのアクセス許可GRANT CREATE SESSION TO SAMPLE;

  • (3)-1承認CREATE TABLE SAMPLEアカウント用テーブル作成GRANT CREATE TABLE TO SAMPLE;

  • (3)-表領域を2つのSAMPLEアカウントに割り当てる(SAMPLEアカウントを変更したためALTER)ALTER USER SAMPLE QUOTA 2M ON SYSTEM;

  • (4)CREATE VIEWがSAMPLEアカウントのビューを作成することを許可するGRANT CREATE VIEW TO SAMPLE;
  • 2)オブジェクト権限


    :操作特定対象(SELECT、INSERT、UPDATE、DELETE、...)アクセス権

    [表現]
    GRANT権限タイプON特定対象TO口座名;

  • (5)SAMPLEアカウント上のKH.EMPLOYEテーブルの表示を許可GRANT SELECT ON KH.EMPLOYEE TO SAMPLE;

  • (6)SAMPLEアカウント上のKH.DEPARTMENTテーブルへの挿入を許可する権限GRANT INSERT ON KH.DEPARTMENT TO SAMPLE;
  • 3) CONNECT, RESOURCE


    :接続、RESOURCE、最低の授権で
    [表現]
    GRANT CONNECT、RESOURCE TO口座名;
    <英雄同盟>
    :特定の権限のセットを1つのセットにする
  • 相互接続:CREATE SESSION(データベース接続権限)
  • RESOURCE : CREATE TABLE, CREATE SEQUENCE ... (特定のオブジェクトを作成および管理する権限)
  • -- 사용자에게 부여할 권한 : CONNECT, RESOURCE
    -- 권한을 부여받을 사용자 : MYMY
    -- CREATE USER MYMY IDENTIFIED BY MYMY;
    -- GRANT CONNECT, RESOURCE TO MYMY;

    TCL(TRANSACTION CONTROL LANGUAGE)


    :取引を制御する言語

    *取引(TRANSACTION)


  • データベースの論理演算ユニット

  • データ変更を1つのトランザクションにマージして処理
    COMMIT(OK)の前に行われた変更は、トランザクションに含まれます.
    (データベースに変更を保存する前に変更を保存する場所のように)

  • トランザクション用SQL:INSERT、UPDATE、DELETE(DML)

  • トランザクション終了後、トランザクションROLBAK、SAVEPOINT(一時的なセーブポイントの取得)の決定、キャンセル
  • COMMIT; 進行
    :
  • は、トランザクションの変更を実際のデータベースに反映することを意味します.
  • ROLLBACK; 進行
    :単一トランザクションの変更を削除し、最後のCOMMITポイント
  • に戻る
  • SAVEPOINT点数名;進行
    :一時記憶ポイント
  • の定義
  • ROLLBACK点数名;進行
    :
  • すべての変更を削除するのではなく、ポイントにロールバックされたトランザクションのみ
    <예시>
    -- 사번이 901인 사원 지움
    DELETE FROM EMP_01
    WHERE EMP_ID = 901;
    
    -- 사번이 900인 사원 지움
    DELETE FROM EMP_01
    WHERE EMP_ID = 900;
    
    ROLLBACK; -- 트랜잭션에 담긴 내용 적용시키지 않고 다시 되돌림.
    
    ---------------------------------------------------------------------------
    -- 200번 사원지움
    DELETE FROM EMP_01
    WHERE EMP_ID = 200;
    
    -- 800, 홍길동, 총무부 사원추가
    INSERT INTO EMP_01
    VALUES(800, '홍길동', '총무부');
    
    COMMIT; -- 트랜잭션에 담긴 내용 적용(저장)시킴.
    
    SELECT * FROM EMP_01; -- 트랜잭션에 있던 내용 적용완료
    

    ※注意事項


    (1)トランザクション->(2)DDL作成、修正など->(3)ROLLBACK
    ROLLBACKに関係なく、DDLの実行時に、トランザクション内のコンテンツが自動的にCOMMITで実行されます.
    CREATE、ALTER、DROPを実行する場合
    既存のトランザクションのすべての変更を実際のデータベースに無条件に反映し、DDLを実行します.
    つまり、DDLを実行する前に変更があった場合は、「画素」(COMMIT,ROLLBACK)を正確に選択してください.
    사용자가 게시글(첨부파일이 존재하는) 추가하는 요청서
    
    => INSERT INTO 첨부파일테이블
    => INSERT INTO 게시글 테이블
    
    둘 다 잘 INSERT가 될 시 성공 => COMMIT(확정)
    둘 중 하나라도 잘 못 INSERT시 실패 => ROLLBACK (기존에 잘 INSERT했던 것도 돌려놓기)

    1.VIEWビュー

    SELECT문 (쿼리문)을 저장해둘 수 있는 객체
    (자주 쓰는 긴 SELECT 문을 저장해두면 긴 SELECT 문을 매번 다시 기술 할 필요 없음)
    임시 테이블같은 존재(실제 데이터가 담겨있는건 아님)
    */
    --韓国で働く社員の4番、氏名、部署名、給与、国/地域名
    SELECT EMP_ID, EMP_NAME, DEPT_TITLE, SALARYY, NATIONAL_NAME, JOB_NAME
    FROM EMPLOYEE
    JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID)
    JOIN LOCATION ON (LOCATION_ID = LOCAL_CODE)
    JOIN NATIONAL USING (NATIONAL_CODE)
    JOIN JOB USING (JOB_CODE)
    WHERE NATIONAL NAME=「韓国」.
    --もし、ロシアや中国などの選択肢が繰り返されていたら?そこはコードを書き続ける必要がある面倒です!
    --あちらのセレクトドアをVIEWにすると、使いやすくなります
    --

    1)VIEWの作成方法

    [표현법]
    CREATE VIEW 뷰명
    AS 서브쿼리;