ホームページ >データベース >mysql チュートリアル >MySQL 外部キー カスケードを実装する方法

MySQL 外部キー カスケードを実装する方法

WBOY
WBOY転載
2023-05-29 21:49:451456ブラウズ

はじめに

MySQL 外部キーは制約の役割を果たし、データベース レベルでのデータの整合性を保証します。
たとえば、CASCADE (カスケード連結) タイプの外部キーを使用すると、子テーブル (user_info など) が親テーブル (user など) に関連付けられている場合、親テーブルが更新または削除されると、子テーブルがテーブルはレコードを更新または削除します。このプロセスはデータベース レベルで完了します。
初期のエンタープライズ システムには多くのデータベース設計があり、プログラマーが削除および更新操作を節約するのには役立ちますが、実際には隠れたルールが増加し、ソフトウェアが複雑になり、パフォーマンスが低下します。

したがって、アプリケーション設計では、データベース レベルではなく、アプリケーション層 (トランザクション処理メカニズムの使用など) でデータの整合性を確保するように最善を尽くす必要があります。

以下は、MySQL の外部キーの概要です。

MySQL で外部キーをサポートする唯一のストレージ エンジンは InnoDB です。外部キーを作成するときは、親テーブルに対応する ## が必要です。 #index. サブテーブル外部キーの作成時に、対応するインデックスも自動的に作成されます。

インデックスを作成するとき、親テーブルを削除または更新するときに、子テーブルで対応する操作 (

  • RESTRICT (制限制限)

    を含む) を指定できます。

  • #アクションなし
  • SET NULL
  • CASCADE (連結)
  • #RESTRICT は NO ACTION と同じです。つまり、
  • 子テーブルに関連レコード
がある場合、

親テーブルは更新できません; CASCADE は parent を意味しますtable
を更新または削除すると、 は子テーブル の対応するレコードを更新または削除します; SET NULL は、親テーブルが更新または削除されると、対応するフィールドが更新または削除されることを意味します子テーブルの は SET NULL です。

外部キーの使用が許可されるのは InnoDB エンジンだけであるため、データ テーブルでは InnoDB エンジンを使用する必要があります。

データベースの作成:

Create database test;

1。最初に 2 つのテーブル stu,sc

create table stu(
sid int UNSIGNED primary key auto_increment,
name varchar(20) not null)
TYPE=InnoDB charset=utf8;

create table sc(
scid int UNSIGNED primary key auto_increment,
sid int UNSIGNED not null,
score varchar(20) default '0',
index (sid),   --外键必须加索引
FOREIGN KEY (sid) REFERENCES stu(sid) ON DELETE CASCADE ON UPDATE CASCADE)
TYPE=InnoDB charset=utf8;

–注: 外部キーにはインデックスを付ける必要があります。

FOREIGN キー(sid) は外部キーを設定し、sid を外部キーとして設定します

REFERENCES stu(sid) 参照関数。 stu テーブルの sid を参照します

ON DELETE CASCADE cascade delete

ON UPDATE CASCADE cascade update

2. 2 つのテーブルにデータを挿入します

insert into stu (name) value ('zxf');
insert into stu (name) value ('ls');
insert into stu (name) value ('zs');
insert into stu (name) value ('ww');

insert into sc(sid,score) values ('1','98');
insert into sc(sid,score) values ('1','98');
insert into sc(sid,score) values ('2','34');
insert into sc(sid,score) values ('2','98');
insert into sc(sid,score) values ('2','98');
insert into sc(sid,score) values ('3','56');
insert into sc(sid,score) values ('4','78');
insert into sc(sid,score) values ('4','98');

注: sc テーブルにデータを挿入する場合、挿入された sid が 22 の場合、外部キー制約に違反して挿入は失敗します。これは、外部キー sidMySQL 外部キー カスケードを実装する方法 が、 stu テーブル。つまり、stu の ID には 22 に等しいデータがありません。

カスケード削除: stu テーブル内の ID 2 の学生を削除すると、sc テーブル内の学生の成績もカスケード削除されます

delete from stu where sid = '2';

カスケード更新: stu テーブル内の ID 3 の学生は ID 6 に変更され、sc テーブル内の学生の対応する ID もカスケードMySQL 外部キー カスケードを実装する方法

update stu set sid=6 where sid='3';

で更新されます。注MySQL 外部キー カスケードを実装する方法

テーブルを削除する場合は、まず外部キー テーブル (sc) を削除し、次に主キー テーブル (stu) を削除する必要があります。上の図は外部キー制約に違反しているため、削除できません

#上の図は通常の削除を示しています。最初に sc テーブルを削除してから、stu テーブルを削除してください。 MySQL 外部キー カスケードを実装する方法

以上がMySQL 外部キー カスケードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。