18

外部キーが名前なしで作成された場合、MySql はそれにデフォルトの名前を付けます。たとえば、テーブル 'Test' の場合、外部キーは 'test_ibfk_1' という名前になります。この名前を使用して外部キーをローカルにドロップすると、チャームのように機能しますが、開発サーバーでは errno: 152 で失敗します。

この名前は大文字と小文字が区別されることはわかっていますが、小文字でも大文字でも結果は同じです。

私の質問: 制約を操作するためにデフォルト名に頼るのは安全ですか (少なくとも MySql では)?

前もって感謝します!

4

4 に答える 4

21

外部キーの名前を知る必要があります。名前なしで作成された場合、名前は自動生成されます。外部キーに関する情報を取得する必要があります。

これらのクエリのいずれかを使用して、外部キー名を取得します -

SELECT
  constraint_name
FROM
  information_schema.REFERENTIAL_CONSTRAINTS
WHERE
  constraint_schema = <'db_name'> AND table_name = <'table_name'>;


SELECT *
FROM
  information_schema.KEY_COLUMN_USAGE
WHERE
  constraint_schema = <'db_name'> AND table_name = <'table_name'> AND   
  referenced_table_name IS NOT NULL;

...そして、ALTER TABLE <table_name> DROP INDEX <fk_name>;外部キーを削除するために使用します。

于 2012-12-13T10:03:10.180 に答える