ORACLE-制約

3256 ワード

予約語:CONTRAINT
  • テーブルの該当するコラムに不要なデータが入力/変更/削除されないように、テーブルの条件を作成または変更します.
    (記憶データの信頼性向上のため)
  • .

    種類


    (1)NOT NULL
    :NULLとして入力しないコラムを指定します.
    コラムレベルでのみ付与できる制約
    -->テーブルコンストレイント構文なし->MODIFYの使用
    「MODIFY+コラム名+コラムレベル制約条件作成方法」を使用して作成
    (2)UNIQUE KEY(ユニークキー)
    :保存されている値は重複できません.一意に保つ必要があります.
    作成時に使用する制約.(NULLを許可)
    (3)PRIMARY KEY(マスタキー)
    :NOT NULL条件とUNIQUE KEY条件の組み合わせ
    (4)CHECK:条件を条件に該当するデータのみを入力する制約条件として付与
    条件がfalseの場合rowは作成されません(
  • )
     CHECK( loc IN('SEOUL', 'BUSAN'))
    (5)FOREGN KEY(外部キー)
    :親テーブルのPRIMARY KEYを参照するコラムに添付する制約
    (exempテーブルのdeptnoコラム)
  • 他の表の特定のコラムを参照してください.したがって、その表にないデータは含まれません.
  • コラム名+コラム属性+CONTRAIN+制約名+REFERENCEs+参照するテーブル(コラム名を参照)
  • .

    テーブルの作成時に制約を適用するか、作成したテーブルに制約を追加できます。


    テーブルの作成時に制約を適用

    SQL> CREATE TABLE dept2(
      2  deptno NUMBER(2) CONSTRAINT dept2_deptno_pk PRIMARY KEY,
      3  dname VARCHAR2(12) CONSTRAINT dept2_deptno_nn NOT NULL,
      4  loc VARCHAR2(12) CONSTRAINT dept2_loc_ck CHECK( loc IN('SEOUL', 'BUSAN'))
      5  );

    制約生成タイプ1。コラムレベルの制限

  • コラムレベルの制約(columnlevel):制約を追加するときに、コラムの横に
  • と書きます.
    コラム名+データ属性+CONTRAINT+制約名+制約名

    制約を作成し、制約にデータを入れます.
    SQL> INSERT INTO dept2
      2  (deptno, dname, loc)
      3  VALUES(10, 'SALES', 'SEOUL');
    制約に違反しないでデータを入れます!

  • 制約に違反した場合
    1既存の値を入れる
  • SQL> INSERT INTO dept2
      2  VALUES(10, 'XXX', 'SEOUL');
    INSERT INTO dept2
    *
    1행에 오류:
    ORA-00001: 무결성 제약 조건(SCOTT.DEPT2_DEPTNO_PK)에 위배됩니다
    2プライマリ・キーを書かない
    SQL> INSERT INTO dept2
      2  (dname, loc)
      3  VALUES('XXX', 'SEOUL');
    INSERT INTO dept2
    *
    1행에 오류:
    ORA-01400: NULL을 ("SCOTT"."DEPT2"."DEPTNO") 안에 삽입할 수 없습니다
    部門名を3つ含まない
    SQL> INSERT INTO dept2
      2  VALUES(20, NULL, 'SEOUL');
    VALUES(20, NULL, 'SEOUL')
               *
    2행에 오류:
    ORA-01400: NULL을 ("SCOTT"."DEPT2"."DNAME") 안에 삽입할 수 없습니다
    4制約エラーの確認
    SQL> INSERT INTO dept2
      2  VALUES(20, 'SALES', 'INCHON');
    INSERT INTO dept2
    *
    1행에 오류:
    ORA-02290: 체크 제약조건(SCOTT.DEPT2_LOC_CK)이 위배되었습니다
    ----->エラーデータの侵入防止、信頼度↑↑

    制約生成タイプ2。表レベル制約(TABLE LEVEL)

  • TABLEレベルの制約:テーブルを宣言するときに、下部に個別に制約を作成します.
    どこを指しているかを知る必要があります.そのため、コラム名(構文がより具体的)
  • を指定する必要があります.
    
    SQL> CREATE TABLE test(
      2  num NUMBER,
      3  name CHAR(10),
      4  deptno NUMBER(2),
      5  CONSTRAINT test_num_pk PRIMARY KEY(num),
      6  CONSTRAINT test_name_u UNIQUE(name),
      7  CONSTRAINT test_name_fk FOREIGN KEY(deptno) REFERENCES dept(deptno));
    NOT NULL制約:テーブル・レベルで**を定義できません.

    コンストレイントなしテーブルを作成した後、コンストレイント条件を動的に追加


    デフォルトでは
    CREATE:オブジェクト作成時
    DROP:オブジェクトを削除する場合
    ALTER:任意のオブジェクトを変更する場合
    後でコンストレイントを追加するのは、オブジェクトを変更するため、ALTERを使用して追加します.
  • ADD CONTRAINT制約の追加
    (表レベル制約の作成方法と同じ)