検索
ホームページデータベースmysql チュートリアル`SET FOREIGN_KEY_CHECKS=1` が警告またはエラーのトリガーに失敗した場合に、InnoDB テーブルで外部キー チェックを強制する方法

How to Force Foreign Key Checks in InnoDB Tables When `SET FOREIGN_KEY_CHECKS=1` Fails to Trigger Warnings or Errors?

InnoDB テーブルで外部キー チェックを強制する方法

問題

行の削除を伴う定期的な更新を受ける一連の InnoDB テーブルを管理しています。そして挿入。これらのテーブルには外部キー制約があるため、テーブルのロード順序が重要になります。外部キー制約の問題を回避するには、外部キーのチェックを無効にして再度有効にする (SET FOREIGN_KEY_CHECKS=0 および SET FOREIGN_KEY_CHECKS=1) ことに頼ります。ただし、外部キー ルールに意図的に違反しているにもかかわらず、チェックを無効にしてデータをロードすると、再度有効にしたときに警告やエラーが発生しないことがわかります。

解決策

InnoDB は提供しません。外部キーのチェックを強制する直接的な方法ですが、回避策はあります。

ストアド キーの使用プロシージャ

1 つの方法は、データベース内のすべての外部キーを検査し、違反している外部キーを特定するストアド プロシージャ (ANALYZE_INVALID_FOREIGN_KEYS) を作成することです。このプロシージャは外部キーをループし、無効な参照をチェックするクエリを生成し、その結果を一時テーブルに保存します。

DELIMITER $$

DROP PROCEDURE IF EXISTS ANALYZE_INVALID_FOREIGN_KEYS$$

CREATE
    PROCEDURE `ANALYZE_INVALID_FOREIGN_KEYS`(
        checked_database_name VARCHAR(64),
        checked_table_name VARCHAR(64),
        temporary_result_table ENUM('Y', 'N'))

    LANGUAGE SQL
    NOT DETERMINISTIC
    READS SQL DATA

    BEGIN
        -- ... (procedure implementation)
    END$$

DELIMITER ;

プロシージャを使用するには、次の 3 つのパラメータを指定します。

  1. チェックするデータベース名パターン (checked_database_name) (例: すべてのデータベースの %)
  2. テーブル名チェックするパターン (checked_table_name) (例: すべてのテーブルの %)
  3. 結果テーブルが一時的であるかどうか (temporary_result_table) (一時的な場合は Y、永続的な場合は N)

プロシージャ結果を INVALID_FOREIGN_KEYS という名前の一時テーブルまたは永続テーブルにロードします。このテーブルには、テーブル スキーマ、テーブル名、列名、制約名、参照テーブル スキーマ、参照テーブル名、参照列名、無効なキーの数、無効な行を取得するための SQL クエリなど、無効な外部キーに関する情報が含まれています。

使用例

すべての無効な外部キーをチェックする場合データベース:

CALL ANALYZE_INVALID_FOREIGN_KEYS('%', '%', 'Y');

結果を表示するには:

SELECT * FROM INVALID_FOREIGN_KEYS;

特定の外部キーの無効な行を取得するには、INVALID_FOREIGN_KEYS テーブルから対応する INVALID_KEY_SQL クエリを実行します。

このアプローチでは、参照元と参照先の両方にインデックスが必要です最適なパフォーマンスを実現する列。

以上が`SET FOREIGN_KEY_CHECKS=1` が警告またはエラーのトリガーに失敗した場合に、InnoDB テーブルで外部キー チェックを強制する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLでビューを使用することの限界は何ですか?MySQLでビューを使用することの限界は何ですか?May 14, 2025 am 12:10 AM

mysqlviewshavelimitations:1)supportallsqloperations、制限、dataManipulationswithjoinsorubqueries.2)それらは、特にパフォーマンス、特にパルフェクソルラージャターセット

MySQLデータベースのセキュリティ:ユーザーの追加と特権の付与MySQLデータベースのセキュリティ:ユーザーの追加と特権の付与May 14, 2025 am 12:09 AM

reperusermanmanagementInmysqliscialforenhancingsecurationsinginuring databaseaperation.1)usecreateusertoaddusers、指定connectionsourcewith@'localhost'or@'% '。

MySQLで使用できるトリガーの数にどのような要因がありますか?MySQLで使用できるトリガーの数にどのような要因がありますか?May 14, 2025 am 12:08 AM

mysqldoes notimposeahardlimitontriggers、しかしpracticalfactorsdeTerminetheireffectiveuse:1)serverconufigurationStriggermanagement; 2)complentiggersincreaseSystemload;

mysql:Blobを保管しても安全ですか?mysql:Blobを保管しても安全ですか?May 14, 2025 am 12:07 AM

はい、それはssafetostoreblobdatainmysql、butonsiderheSeCactors:1)Storagespace:blobscanconsumesificantspace.2)パフォーマンス:パフォーマンス:大規模なドゥエットブロブスメイズ階下3)backupandrecized recized recized recize

MySQL:PHP Webインターフェイスを介してユーザーを追加しますMySQL:PHP Webインターフェイスを介してユーザーを追加しますMay 14, 2025 am 12:04 AM

PHP Webインターフェイスを介してMySQLユーザーを追加すると、MySQLI拡張機能を使用できます。手順は次のとおりです。1。MySQLデータベースに接続し、MySQLI拡張機能を使用します。 2。ユーザーを作成し、CreateUserステートメントを使用し、パスワード()関数を使用してパスワードを暗号化します。 3. SQLインジェクションを防ぎ、MySQLI_REAL_ESCAPE_STRING()関数を使用してユーザー入力を処理します。 4.新しいユーザーに権限を割り当て、助成金ステートメントを使用します。

MySQL:BLOBおよびその他のNO-SQLストレージ、違いは何ですか?MySQL:BLOBおよびその他のNO-SQLストレージ、違いは何ですか?May 13, 2025 am 12:14 AM

mysql'sblobissuitable forstoringbinarydatawithinarationaldatabase、whileenosqloptionslikemongodb、redis、andcassandraofferferulesions forunstructureddata.blobissimplerbutcanslowdowdowd withwithdata

MySQLユーザーの追加:構文、オプション、セキュリティのベストプラクティスMySQLユーザーの追加:構文、オプション、セキュリティのベストプラクティスMay 13, 2025 am 12:12 AM

toaddauserinmysql、使用:createuser'username '@' host'identifidedby'password '; here'showtodoitsely:1)chosehostcarefilytoconを選択しますTrolaccess.2)setResourcelimitslikemax_queries_per_hour.3)usestrong、uniquasswords.4)endforcessl/tlsconnectionswith

MySQL:文字列データ型の一般的な間違いを回避する方法MySQL:文字列データ型の一般的な間違いを回避する方法May 13, 2025 am 12:09 AM

toavoidcommonMonmistakeswithStringDatatypesinmysql、undultingStringTypenuste、choosetherightType、andManageEncodingandCollat​​ionsEttingtingive.1)U​​secharforfixed-LengthStrings、Varcharforaible Length、AndText/Blobforlardata.2)setCurrectCherts

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!