ORACLE-制約
3256 ワード
予約語:CONTRAINTテーブルの該当するコラムに不要なデータが入力/変更/削除されないように、テーブルの条件を作成または変更します.
(記憶データの信頼性向上のため) .
(1)NOT NULL
:NULLとして入力しないコラムを指定します.
コラムレベルでのみ付与できる制約
-->テーブルコンストレイント構文なし->MODIFYの使用
「MODIFY+コラム名+コラムレベル制約条件作成方法」を使用して作成
(2)UNIQUE KEY(ユニークキー)
:保存されている値は重複できません.一意に保つ必要があります.
作成時に使用する制約.(NULLを許可)
(3)PRIMARY KEY(マスタキー)
:NOT NULL条件とUNIQUE KEY条件の組み合わせ
(4)CHECK:条件を条件に該当するデータのみを入力する制約条件として付与
条件がfalseの場合rowは作成されません()
:親テーブルのPRIMARY KEYを参照するコラムに添付する制約
(exempテーブルのdeptnoコラム) 他の表の特定のコラムを参照してください.したがって、その表にないデータは含まれません. コラム名+コラム属性+CONTRAIN+制約名+REFERENCEs+参照するテーブル(コラム名を参照) .
コラムレベルの制約(columnlevel):制約を追加するときに、コラムの横に と書きます.
コラム名+データ属性+CONTRAINT+制約名+制約名
制約を作成し、制約にデータを入れます.
制約に違反した場合
1既存の値を入れる
TABLEレベルの制約:テーブルを宣言するときに、下部に個別に制約を作成します.
どこを指しているかを知る必要があります.そのため、コラム名(構文がより具体的) を指定する必要があります.
デフォルトでは
CREATE:オブジェクト作成時
DROP:オブジェクトを削除する場合
ALTER:任意のオブジェクトを変更する場合
後でコンストレイントを追加するのは、オブジェクトを変更するため、ALTERを使用して追加します. ADD 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コラム)
テーブルの作成時に制約を適用するか、作成したテーブルに制約を追加できます。
テーブルの作成時に制約を適用
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。コラムレベルの制限
コラム名+データ属性+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)
どこを指しているかを知る必要があります.そのため、コラム名(構文がより具体的)
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を使用して追加します.
(表レベル制約の作成方法と同じ)
Reference
この問題について(ORACLE-制約), 我々は、より多くの情報をここで見つけました https://velog.io/@jeongmmmn/ORACLE-제약-조건テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol