1. 外部キー制約MySQL は外部キー制約を使用して、テーブル間のデータの整合性と正確性を確保します。 外部キーとは何ですか?主キー: レコードを一意に識別し、重複したり空にしたりすることはできず、データの整合性を確保するために使用されます。 外部キー: 別のテーブルの主キーです。外部キーは重複することも、空にすることもできます。外部キーは他のテーブルとの接続を確立するために使用されます。したがって、外部キーについて話す場合、少なくとも 2 つのテーブルが関係している必要があります。たとえば、次の 2 つの表: 外部キーを使用する条件: 1. 両方のテーブルは InnoDB テーブルである必要があります。MyISAM テーブルは現時点では外部キーをサポートしていません (将来のバージョンではサポートされる可能性があると言われていますが、少なくとも現時点ではサポートされていません)。 外部キーの利点: 2 つのテーブルを関連付け、データの一貫性を確保し、いくつかのカスケード操作を実装できます。 外部キーの定義構文は次のとおりです。
この構文は、CREATE TABLE および ALTER TABLE で使用できます。CONSTRAINT シンボルを指定しない場合は、MYSQL によって自動的に名前が生成されます。
簡単なデモ使用dage と xiaodi という 2 つのテーブルを作成します。兄のテーブルが主キーで、弟のテーブルが外部キーです。 テーブルを作成します。 テーブル `dage` を作成します ( `id` int(11) NOT NULL auto_increment, `name` varchar(32) デフォルト '' 主キー (`id`)) エンジン=InnoDB デフォルト文字セット=latin1; テーブル `xiaodi` を作成します ( `id` int(11) NOT NULL auto_increment, `dage_id` int(11) デフォルトはNULL、 `name` varchar(32) デフォルト '' 主キー (`id`)、 キー `dage_id` (`dage_id`), 制約 `xiaodi_ibfk_1` 外部キー (`dage_id`) 参照 `dage` (`id`) )ENGINE=InnoDB デフォルト文字セット=latin1; 兄貴を挿入: mysql> dage(name) に値('Causeway Bay') を挿入します。 クエリは正常、1 行が影響を受けました (0.01 秒) mysql> dage から * を選択します。 +----+--------+ | ID | 名前 | +----+--------+ | 1 | コーズウェイベイ | +----+--------+ セット内の 1 行 (0.00 秒) 弟を挿入します: mysql> xiaodi(dage_id,name) に値(1,'Causeway Bay_Little Brother A') を挿入します。 クエリは正常、1 行が影響を受けました (0.02 秒) mysql> xiaodi から * を選択します。 +----+---------+--------------+ | id | 日付 ID | 名前 | +----+---------+--------------+ | 1 | 1 | コーズウェイベイ_弟A | +----+---------+--------------+ ビッグブラザーを削除します: mysql> id=1 の dage から削除します。 エラー 1451 (23000): 親行を削除または更新できません: 外部キー制約が失敗しました (`bstar/xiaodi`、制約 `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)) ヒント: いいえ、制限があります。兄の下には弟がいるので、兄は私たちを見捨てることはできません。 新しい子を挿入します: mysql> xiaodi(dage_id,name) に値 (2,'旺角_小弟A') を挿入します。 エラー 1452 (23000): 子行を追加または更新できません: 外部キー制約が失敗しました (`bstar/xiaodi`、制約 `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)) ヒント: 君は反抗したいんだね!君にはまだ兄がいないんだね! 外部キー制約にイベント トリガー制限を追加します。 mysql> show テーブル xiaodi を作成します。 制約 `xiaodi_ibfk_1` 外部キー (`dage_id`) 参照 `dage` (`id`) mysql> テーブル xiaodi を変更し、外部キー xiaodi_ibfk_1 を削除します。 クエリは正常、1 行が影響を受けました (0.04 秒) レコード: 1 重複: 0 警告: mysql> alter table xiaodi add foreign key(dage_id) references dage(id) on delete cascade on update cascade; クエリは正常、1 行が影響を受けました (0.04 秒) 記録: 1 重複: 0 警告: 0 もう一度ビッグブラザーを削除してみます: mysql> id=1 の dage から削除します。 クエリは正常、1 行が影響を受けました (0.01 秒) mysql> dage から * を選択します。 空セット (0.01 秒) mysql> xiaodi から * を選択します。 空のセット (0.00 秒) おっと、今回は対応する弟がいなくなってしまった、仕方がない、誰が私に削除カスケード(カスケード制限)をオンにするように言ったんだ! 注意すべき点
MySQL の主キーと外部キーの使用と説明についての簡単な紹介はこれで終わりです。MySQL の主キーと外部キーに関するより詳しい情報については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS フレックスレイアウトのリストの最後の行を左揃えにする N 通りの方法 (要約)
>>: ファイルをアップロードするときに enctype フィールドを使用する理由は何ですか?
この記事は主にSQLシリアル番号取得コード例を紹介します。記事ではサンプルコードを詳細に紹介しており...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
el-dialogをコンポーネントとしてカプセル化するelement-ui を使用する場合、ポップア...
Nginx は、多くの優れた機能を備えた強力で高性能な Web およびリバース プロキシ サーバーで...
目次概要node.js でマルチコア CPU を最大限に活用する方法Node で子プロセスを作成する...
目次1. WeChat Payを開く1.1 アフィリエイト加盟店番号1.2 加盟店番号を追加する1....
目次1 マスター・スレーブの読み取り・書き込み分離1.1 コア2 マスタースレーブレプリケーション2...
単一のテーブルをエクスポートするmysqldump -u ユーザー -p db名 テーブル名 >...
スーパーバイザー紹介Supervisor は、Python で開発されたクライアント/サーバー サー...
私の環境: 3 centos7.5 1804マスター 192.168.100.140ノード1 192...
まずプロジェクトの成果物を構成するスタートアップ項目の設定 Tomcatサービスを作成する開始したい...
Docker を使用して、柔軟なオンライン PHP 環境を構築します。場合によっては、他の人がすでに...
Apache Tika は、さまざまな形式のファイルからファイル タイプを検出し、コンテンツを抽出す...
Web 開発では、次のような文字によく遭遇します: これは実際には HTML が...