ホームページ >データベース >mysql チュートリアル >MySQL 外部キー カスケードを実装する方法
MySQL 外部キーは制約の役割を果たし、データベース レベルでのデータの整合性を保証します。
たとえば、CASCADE (カスケード連結) タイプの外部キーを使用すると、子テーブル (user_info など) が親テーブル (user など) に関連付けられている場合、親テーブルが更新または削除されると、子テーブルがテーブルはレコードを更新または削除します。このプロセスはデータベース レベルで完了します。
初期のエンタープライズ システムには多くのデータベース設計があり、プログラマーが削除および更新操作を節約するのには役立ちますが、実際には隠れたルールが増加し、ソフトウェアが複雑になり、パフォーマンスが低下します。
したがって、アプリケーション設計では、データベース レベルではなく、アプリケーション層 (トランザクション処理メカニズムの使用など) でデータの整合性を確保するように最善を尽くす必要があります。
以下は、MySQL の外部キーの概要です。
MySQL で外部キーをサポートする唯一のストレージ エンジンは InnoDB です。外部キーを作成するときは、親テーブルに対応する ## が必要です。 #index. サブテーブル外部キーの作成時に、対応するインデックスも自動的に作成されます。
インデックスを作成するとき、親テーブルを削除または更新するときに、子テーブルで対応する操作 (を含む) を指定できます。
親テーブルは更新できません; CASCADE は parent を意味しますtable
が を更新または削除すると、 は子テーブル の対応するレコードを更新または削除します; SET NULL は、親テーブルが更新または削除されると、対応するフィールドが更新または削除されることを意味します子テーブルの は SET NULL です。 例
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 の場合、外部キー制約に違反して挿入は失敗します。これは、外部キー sid が、 stu テーブル。つまり、stu の ID には 22 に等しいデータがありません。
カスケード削除: stu テーブル内の ID 2 の学生を削除すると、sc テーブル内の学生の成績もカスケード削除されます
delete from stu where sid = '2';
カスケード更新: stu テーブル内の ID 3 の学生は ID 6 に変更され、sc テーブル内の学生の対応する ID もカスケード
update stu set sid=6 where sid='3';
で更新されます。注
テーブルを削除する場合は、まず外部キー テーブル (sc) を削除し、次に主キー テーブル (stu) を削除する必要があります。上の図は外部キー制約に違反しているため、削除できません#上の図は通常の削除を示しています。最初に sc テーブルを削除してから、stu テーブルを削除してください。
以上がMySQL 外部キー カスケードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。