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

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

May 29, 2023 pm 09:49 PM
mysql

はじめに

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 サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPのビッグデータ構造処理スキル PHPのビッグデータ構造処理スキル May 08, 2024 am 10:24 AM

PHPのビッグデータ構造処理スキル

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? Jun 03, 2024 pm 08:11 PM

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか?

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? Jun 03, 2024 pm 12:19 PM

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか?

データベースにおける Java 列挙型のアプリケーション シナリオは何ですか? データベースにおける Java 列挙型のアプリケーション シナリオは何ですか? May 05, 2024 am 09:06 AM

データベースにおける Java 列挙型のアプリケーション シナリオは何ですか?

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? Jun 02, 2024 pm 02:26 PM

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか?

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? Jun 02, 2024 pm 02:13 PM

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか?

PHP 配列ページングのパフォーマンス最適化戦略 PHP 配列ページングのパフォーマンス最適化戦略 May 02, 2024 am 09:27 AM

PHP 配列ページングのパフォーマンス最適化戦略

See all articles