目次
        一外键约束的参照操作" >        一外键约束的参照操作
       二更新外键约束的字段准备工作" >       二更新外键约束的字段准备工作
       (1)创建一个子表users1" >       (1)创建一个子表users1
      (2)在父表provinces插入记录并且查看父表的记录信息:" >      (2)在父表provinces插入记录并且查看父表的记录信息:
      (3)在子表users1插入记录:" >      (3)在子表users1插入记录:
      三外键约束下的删除操作" >      三外键约束下的删除操作
      四更新操作参考" >      四更新操作参考
      (1)ON DELETE操作" >      (1)ON DELETE操作
       (2)ON UPDATE操作" >       (2)ON UPDATE操作
       五表级约束与列级约束" >       五表级约束与列级约束
ホームページ データベース mysql チュートリアル MySQL学习10:外键约束下的更新操作

MySQL学习10:外键约束下的更新操作

Jun 07, 2016 pm 02:51 PM
mysql 外部キー 勉強 操作する 更新する 制約

上一篇只是讲述了外键约束的要求,并没有讲述外键约束的参照操作。这一次我来看看外键约束下的更新操作。 一外键约束的参照操作 我们进行外键约束的创建以后,在更新表的时候,子表是否也进行相应的更新。这是我们创建外键约束最大的好 处。有以下几种: 1)C

        上一篇只是讲述了外键约束的要求,并没有讲述外键约束的参照操作。这一次我来看看外键约束下的更新操作。

        一外键约束的参照操作

       我们进行外键约束的创建以后,在更新表的时候,子表是否也进行相应的更新。这是我们创建外键约束最大的好

处。有以下几种:

       1)CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。

       2)SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指

定NOT NULL。

       3)RESTRICT:拒绝对父表的删除或更新操作。

       4)NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。

       二更新外键约束的字段准备工作

       (1)创建一个子表users1

       CREATE TABLE users1(

          id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

          username VARCHAR(10) NOT NULL,

          pid SMALLINT UNSIGNED,

          FOREIGN KEY (pid) REFERENCES provinces (id) ON DELETE CASCADE

       ); 

      SHOW CREATE TABLE users1;



      (2)在父表provinces插入记录并且查看父表的记录信息:

      INSERT provinces(pname) VALUES('A');

      INSERT provinces(pname) VALUES('B');

      INSERT provinces(pname) VALUES('C');

      SELECT * FROM provinces;


      (3)在子表users1插入记录:

      INSERT users1(username,pid) VALUES('Tom',3);

      INSERT users1(username,pid) VALUES('John',3);

      INSERT users1(username,pid) VALUES('Tom',6);

      INSERT users1(username,pid) VALUES('Rose',1);

      SELECT * FROM users1;


      由上面结果知道:如果外键列pid字段的数字大于3就不会插入记录,这是因为外键列pid字段参照的是父表

provinces中的参照列id字段,既然父表中id字段只存在3条,那么子表users1中插入的pid字段当然不能大于3;但是插

入记录会存在索引,这就是上面结果显示的原因,也是id字段为1,2,4的原因。

      三外键约束下的删除操作

      假设我们把provinces数据表中的id=3的记录删除

      DELETE FROM provinces WHERE id=3;

      SELECT * FROM provinces; 

      SELECT * FROM users1;


      既然删除做到了,那么更新数据也会做到同样的效果,这里就不再进行举例说明。

      四更新操作参考

      (1)ON DELETE操作

      RESTRICT(约束):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不

允许删除。

      NO ACTION:意思同RESTRICT,即如果存在从数据,不允许删除主数据。

      CASCADE(级联):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录否有对应外键,如果有则也删

除外键在子表(即包含外键的表)中的记录。

      SET NULL:当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表

中该外键值为null(不过这就要求该外键允许取null)。

       (2)ON UPDATE操作

       RESTRICT(约束):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则

不允许更新。

       NO ACTION:意思同RESTRICT。

       CASCADE(级联):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也

更新外键在子表(即包含外键的表)中的记录。

       SET NULL:当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子

中该外键值为null(不过这就要求该外键允许取null)。

       注:NO ACTION和RESTRICT的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执

行,后者具有最高的优先权执行。

       五表级约束与列级约束

       按照参照数目的多少来划分:分为表级约束和列级约束。

       对一个数据列建立的约束,称为列级约束。列级约束既可以在列定义时声明,也可以在列定义后声明。

       对多个数据列建立的约束,称为表级约束。表级约束只能在列定义后声明。

       使用表级约束和列级约束需要注意的是:

       1NOT NULL约束和DEFAULT约束不存在表级约束。其余的约束都存在列级约束和表级约束。

       2实际开发过程中,列级约束使用的较多,表级约束很少使用。




このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

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

ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

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

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

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

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

Windows は指定されたデバイス、パス、またはファイルにアクセスできません Windows は指定されたデバイス、パス、またはファイルにアクセスできません Jun 18, 2024 pm 04:49 PM

友人のコンピュータにはこのような障害があり、「この PC」と C ドライブのファイルを開くと、「Explorer.EXE Windows は指定されたデバイス、パス、またはファイルにアクセスできません。プロジェクトにアクセスするための適切な権限がない可能性があります。」と表示されます。フォルダ、ファイル、このコンピュータ、ごみ箱などを含め、ダブルクリックするとこのようなウィンドウが表示されますが、通常は右クリックで開きます。システムのアップデートが原因でこの状況が発生した場合は、以下のエディターで解決方法を説明します。 1. レジストリ エディターを開いて Win+R と入力し、「regedit」と入力するか、スタート メニューを右クリックして実行し、「regedit」と入力します。 2. レジストリ「Computer\HKEY_CLASSES_ROOT\PackagedCom\ClassInd」を見つけます。

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

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

Windows が更新を永久に一時停止し、Windows が自動更新をオフにする Windows が更新を永久に一時停止し、Windows が自動更新をオフにする Jun 18, 2024 pm 07:04 PM

Windows アップデートにより、次の問題が発生する可能性があります。 1. 互換性の問題: 一部のアプリケーション、ドライバー、またはハードウェア デバイスは、新しい Windows アップデートと互換性がなく、適切に動作しなかったり、クラッシュしたりする可能性があります。 2. パフォーマンスの問題: Windows アップデートにより、システムが遅くなったり、パフォーマンスが低下したりする場合があります。これは、新機能または改善により、実行するためにより多くのリソースが必要になることが原因である可能性があります。 3. システムの安定性の問題: 一部のユーザーは、Windows 更新プログラムをインストールした後、システムで予期しないクラッシュやブルー スクリーン エラーが発生する可能性があると報告しました。 4. データ損失: まれに、Windows アップデートによりデータ損失やファイル破損が発生する場合があります。このため、重要な更新を行う前に、バックアップを作成してください。

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

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

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

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

See all articles