レコードを削除するときにMySQLがブロック制限(定数)を取得する、HowTo

時々、示されたタスクが発生することはめったにありませんが、外部リンクによる現在のレコードの削除をテーブルがブロックしているレコードを見つけます。





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つのクライアントアプリケーションがこのデータベースのデータ(異なるサブサーキット)で動作し、データベースの整合性チェックがデータベースにプルされ、ユーザーは出力時にエラーを要求しましたリンクがあるエントリを削除できないことも、これらのリンクを示しています。



All Articles