ホームページ データベース mysql チュートリアル SQL 整合性制約とは何ですか?

SQL 整合性制約とは何ですか?

May 09, 2019 am 09:50 AM

SQL 整合性制約には次のものが含まれます: 1. 「NOT NULL」非 null 制約、指定された列は null 値を持つことは許可されません; 2. 「UNIQUE」一意の制約、データ内に重複する値はありません。指定された列; 3. "PRIMARY" KEY" 主キー制約、テーブルの各行を一意に識別します; 4. "FOREIGN KEY" 外部キー制約; 5. "CHECK" 条件付き制約。

SQL 整合性制約とは何ですか?

整合性制約は、ユーザーによる変更によってデータの一貫性が損なわれないことを保証し、データの正確性と互換性を保護する手段です。

5 つの共通制約:

NOT NULL: 非 null 制約 C、指定された列は null 値を許可しません

UNIQUE: 一意制約 U、指定された列に重複する値がない、またはテーブル内の各値または値の各グループが一意になります

PRIMARY KEY: 主キー制約 P、主キー制約 P、各行を一意に識別しますテーブル、および NULL 値は許可されません。テーブルには主キー制約を 1 つだけ持つことができます。

FOREIGN KEY: 外部キー制約 R. 1 つのテーブルの列が他のテーブルの列を参照するため、依存関係が存在します。列

CHECK: 条件付き制約 C、列が特定の条件を満たすかどうかを指定します

非 null 制約 NK

create table member(
    mid number,    
    name varchar2(200) not null
    );
ログイン後にコピー

null 挿入エラー:

SQL> insert into member(mid,name) values(1,null);
*
第 1 行出现错误:
ORA-01400: 无法将 NULL 插入 ("SCOTT"."MEMBER"."NAME")
ログイン後にコピー

一意制約 UK

drop table member purge;create table member(
    mid number,
    name varchar2(200) not null,
    email varchar2(50) unique
    );
ログイン後にコピー

挿入エラー

SQL> insert into member(mid,name,email) values (1,'scott','scott@163.com');
ログイン後にコピー

1 行が作成されました。

SQL> insert into member(mid,name,email) values (2,'jack','scott@163.com');
insert into member(mid,name,email) values (2,'jack','scott@163.com')
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.SYS_C0010891)
ログイン後にコピー

制約の名前を指定してください

このエラーは、どのフィールドに前述の非 null 制約のような問題があるのか​​をユーザーに正確に伝えるものではありません。この制約の名前。名前

create table member(
    mid number,
    name varchar2(200) not null,
    email varchar2(50),    
    constraint uk_email unique(email)
    );
ログイン後にコピー

主キー制約 PK

主キー制約 = 空でない制約 一意の制約

create table member(
    mid number,
    name varchar2(200) not null,
    email varchar2(50),    
    constraint pk_number primary key(mid),    
    constraint uk_email unique(email)
    );
ログイン後にコピー

間違ったデータを挿入していますエラーが報告されます:

SQL> insert into member(mid,name,email) values (1,'jack','scott@163.com');
ログイン後にコピー

1 行が作成されました

SQL> insert into member(mid,name,email) values (1,'jack','jack@163.com');
insert into member(mid,name,email) values (1,'jack','jack@163.com')
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.PK_NUMBER)
ログイン後にコピー

チェック制約 CK

create table member(
   mid number,    
   name varchar2(200) not null,    
   age number check(age between 0 and 200),    
   sex varchar2(10),    
   email varchar2(50),    
   constraint pk_number primary key(mid),    
   constraint uk_email unique(email),    
   constraint ck_sex check(sex in('男','女'))    
   );
ログイン後にコピー

間違ったデータの挿入エラー:

SQL> insert into member(mid,name,age,sex,email) values (1,'Jack','300','无','jack@163.com');
insert into member(mid,name,age,sex,email) values (1,'Jack','300','无','jack@163.com')
*
第 1 行出现错误:
ORA-02290: 违反检查约束条件 (SCOTT.CK_SEX)
ログイン後にコピー

主外部キー制約 FK

create table member(
    mid number,
    name varchar2(200) not null,    
    constraint pk_mid primary key(mid)
    );    
create table advice(
       adid number,
       content clob not null,
       mid number,       
       constraint pk_adid primary key(adid),       
       constraint fk_mid foreign key(mid) references member(mid)
       );
ログイン後にコピー

データを正しく挿入します。mid はアタッチされたテーブルにすでに存在します

insert into member(mid,name) values (1,'Scott');
insert into member(mid,name) values (2,'Jack');
insert into advice(adid,content,mid) values (1,'test',1);
insert into advice(adid,content,mid) values (2,'test',2);
commit;
ログイン後にコピー

に存在しない Mid データを挿入します親テーブル

SQL> insert into advice(adid,content,mid) values (3,'test',3);
insert into advice(adid,content,mid) values (3,'test',3)
*
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (SCOTT.FK_MID) - 未找到父项关键字
ログイン後にコピー

主キー制約と外部キー制約を採用すると、テーブルの削除とデータ削除で新たな問題が発生します

親テーブルを削除するには、まず子テーブルを削除する必要があります

SQL> drop table member;drop table member           
*
第 1 行出现错误:
ORA-02449: 表中的唯一/主键被外键引用
ログイン後にコピー

親テーブルを強制的に削除すると、パージ オプションは使用できなくなり、ワード テーブルの主キー制約と外部キー制約は存在しなくなります

SQL> drop table member cascade constraint;
表已删除。
SQL> insert into advice(adid,content,mid) values (3,'test',3);
ログイン後にコピー

1 行が作成されました

To親テーブルのデータを削除するには、まずテーブルという単語のデータを削除します

SQL> delete from member where mid=1;
delete from member where mid=1
*
第 1 行出现错误:
ORA-02292: 违反完整约束条件 (SCOTT.FK_MID) - 已找到子记录
ログイン後にコピー

この方法に加えて、カスケード操作句を設定することもできます

on delete cascade

create table advice(
       adid number,
       content clob not null,
       mid number,       
       constraint pk_adid primary key(adid),       
       constraint fk_mid foreign key(mid) references member(mid) on delete cascade
       );
ログイン後にコピー

この場合、付録データを削除するとワードテーブル内のデータも削除されます。

on delete set null

create table advice(       
adid number,       
content clob not null,       
mid number,       
constraint pk_adid primary key(adid),       
constraint fk_mid foreign key(mid) references member(mid) on delete set null      
 );
ログイン後にコピー

親テーブルのデータを削除すると、子テーブルの対応する関連フィールドは null

SQL> delete from member where mid=1;

已删除 1 行。

SQL> select * from advice;

      ADID CONTENT         MID
---------- ---------- ----------
    test
    test            2
ログイン後にコピー
に設定されます

制約の表示#

SQL>  select constraint_name,constraint_type,table_name  from user_constraints; 

CONSTRAINT_NAME            C   TABLE_NAME
------------------------------ - ------------------------------
FK_DEPTNO                  R       EMP
PK_EMP                     P       EMP
PK_DEPT                    P       DEPT
ログイン後にコピー

#R 外部キー制約、C チェック制約、Q 一意制約、P 主キー制約

##制約の変更

制約の追加

alter table member add constraint pk_mid primary key(mid);
alter table member add constraint ck_age check(age between 0 and 200);
alter table member modify (name varchar2(50) not null);
ログイン後にコピー

null 以外の制約では変更メソッドが使用されることに注意してください

制約の無効化/有効化

Non -外部キー

alter table member disable constraint ck_age;
alter table member enable constraint ck_age;
ログイン後にコピー

外部キー

alter table member disable constraint pk_mid cascade;
ログイン後にコピー

削除制約

alter table member drop constraint pk_mid cascade;
alter table member drop constraint ck_age;
ログイン後にコピー

以上がSQL 整合性制約とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Mar 19, 2025 pm 03:51 PM

この記事では、MySQLのAlter Tableステートメントを使用して、列の追加/ドロップ、テーブル/列の名前の変更、列データ型の変更など、テーブルを変更することについて説明します。

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? Mar 18, 2025 pm 12:01 PM

記事では、証明書の生成と検証を含むMySQL用のSSL/TLS暗号化の構成について説明します。主な問題は、セルフ署名証明書のセキュリティへの影響を使用することです。[文字カウント:159]

MySQLの大きなデータセットをどのように処理しますか? MySQLの大きなデータセットをどのように処理しますか? Mar 21, 2025 pm 12:15 PM

記事では、MySQLで大規模なデータセットを処理するための戦略について説明します。これには、パーティション化、シャード、インデックス作成、クエリ最適化などがあります。

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? 人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? Mar 21, 2025 pm 06:28 PM

記事では、MySQLワークベンチやPHPMyAdminなどの人気のあるMySQL GUIツールについて説明し、初心者と上級ユーザーの機能と適合性を比較します。[159文字]

ドロップテーブルステートメントを使用してMySQLにテーブルをドロップするにはどうすればよいですか? ドロップテーブルステートメントを使用してMySQLにテーブルをドロップするにはどうすればよいですか? Mar 19, 2025 pm 03:52 PM

この記事では、ドロップテーブルステートメントを使用してMySQLのドロップテーブルについて説明し、予防策とリスクを強調しています。これは、バックアップなしでアクションが不可逆的であることを強調し、回復方法と潜在的な生産環境の危険を詳述しています。

外国の鍵を使用して関係をどのように表現しますか? 外国の鍵を使用して関係をどのように表現しますか? Mar 19, 2025 pm 03:48 PM

記事では、外部キーを使用してデータベース内の関係を表すことで、ベストプラクティス、データの完全性、および避けるべき一般的な落とし穴に焦点を当てています。

JSON列にインデックスを作成するにはどうすればよいですか? JSON列にインデックスを作成するにはどうすればよいですか? Mar 21, 2025 pm 12:13 PM

この記事では、クエリパフォーマンスを強化するために、PostgreSQL、MySQL、MongoDBなどのさまざまなデータベースでJSON列にインデックスの作成について説明します。特定のJSONパスのインデックス作成の構文と利点を説明し、サポートされているデータベースシステムをリストします。

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか? 共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか? Mar 18, 2025 pm 12:00 PM

記事では、準備されたステートメント、入力検証、および強力なパスワードポリシーを使用して、SQLインジェクションおよびブルートフォース攻撃に対するMySQLの保護について説明します。(159文字)

See all articles