2017-11-30 23 views
0

私はテーブルを持っています。Userここで、useridはプライマリキーです。誰かがユーザーを削除しようとすると、そのユーザーが他のテーブルで参照されているかどうかを確認する必要があります。私はダースの異なるクエリを作成し、いくつかのinformation_schemaレベルチェックがあるかどうか疑問に思っていません。特定の外部キーを持つ他のテーブルからレコードを取得する

どのテーブルが列を参照しているかわかりますが、参照するレコードを追加する方法はありますか?

は、あなたがそれをベンダー・データベースであってもよい私これに表示された質問では、このテーブル/列

SELECT * 
FROM 
    information_schema.KEY_COLUMN_USAGE 
WHERE 
    REFERENCED_TABLE_NAME = 'User' 
    AND REFERENCED_COLUMN_NAME = 'userid'; 

答えて

1

を参照するテーブルを取得します。私はベンダーのデータベースで外国の参考文献を検索するために、何度も何度もデータベースを掘り起こしていました。残念ながら、挿入/更新/削除ごとにすべての外部参照を検索する動的な方法はありません。また、自動的にこれを行うために何かを狂わせる可能性がある場合は、各テーブルをカバーする。

データベースのデザインが狂っていない場合、おそらく異種の列すべてが同じ名前のuseridを使用している可能性があります(これはBIGのifです)。 information_schemaを検索すると、名前がuseridのすべての列が検索されます。これは、外国の参照をより詳細に調べるためのテーブルのリストを提供するでしょう。さらに広いネットをキャストするには、NAME = 'userid'をWHERE句に入れるのではなく、NAME LIKE '%userid%'を使用します。

これらのインスタンスで使用したもう1つの戦略は、データベース比較ツールです。 SQL Serverのユーザーであるため、私はVisual Studioのビルトインツールしか使用していないので、MySQLのための特別な推奨事項はありません。いずれにしても、本番データベースにはほとんど活動がない場合を除いて、データベースを2回バックアップします。両方をサーバーに別の名前( 'test_vanilla'や 'test_change'など)に復元します。アプリケーションを 'test_change'データベースに向け、ユーザーを削除し、両方のデータベースに対して比較ツールを実行し、変更内容を確認します。これは、削除操作でヒットしたテーブルを表示します。これはおそらく最も退屈ですが、最も明確かつ正確な結果を提供します。

あなたが正しい方向を指していることを望みます。がんばろう!

関連する問題