1. 5.1.16以降のMySQLバージョンが必要です。このバージョンからは、information_schemaサービスデータベースに定数REFERENTIAL_CONSTRAINTSの説明が記載されたテーブルが表示されます。
2.この投稿が書かれた検索リクエスト:
SELECT information_schema.referential_constraints.table_name, information_schema.key_column_usage.column_name FROM information_schema.referential_constraints INNER JOIN information_schema.key_column_usage ON information_schema.key_column_usage.constraint_schema = information_schema.referential_constraints.constraint_schema AND information_schema.key_column_usage.constraint_name = information_schema.referential_constraints.constraint_name WHERE information_schema.referential_constraints.constraint_schema = schema() AND delete_rule = 'RESTRICT' AND information_schema.referential_constraints.referenced_table_name = :table
ここで、現在のテーブルにRESTRICT DELETE_RULEを持つテーブルとその外部キーを選択します。
追伸 次のように、この庭がPHP(PDO)にあるconstエラーをキャッチしています。
try { // do pdo execute() } catch (Exception $e) { /** * Find constraints error */ if ( (strpos($e->getMessage(), 'SQLSTATE[HY000]') !== false && strpos($e->getMessage(), 'General error: 1451')) || (strpos($e->getMessage(), 'SQLSTATE[23000]') !== false && strpos($e->getMessage(), 'Integrity constraint violation: 1451')) ) { // look for constraints } }
P.P.S
必要なときにライブアプリケーション:
現在のデータベーススキーマには、大規模な分岐を含む55個のテーブルが含まれます(3年間で何度も洗練されています)、CMFタイプの4つのクライアントアプリケーションがこのデータベースのデータ(異なるサブサーキット)で動作し、データベースの整合性チェックがデータベースにプルされ、ユーザーは出力時にエラーを要求しましたリンクがあるエントリを削除できないことも、これらのリンクを示しています。