2012-06-17 15 views
8

MySQLで既存のテーブルを変更する方法、外部キーを別のテーブルに設定する方法、コマンドラインを使用する方法コマンドラインを使用してMySQLテーブルの外部キーを変更する方法

+0

Googleを使用しようとしましたが、この正確なケースをカバーするものは見つかりませんでした。私はMySQLの管理者でそれを行うか、または外部キーを使用してテーブルを作成することを知っていますが、私は上記の質問でこれを知らない。 –

+0

製品ドキュメントは、mysql 5.7 alter tableを使用してGoogleで見つけることができます。 –

答えて

16

既存のforeign keyを削除してもう1つ作成する必要があります。このような例:

ALTER TABLE my_table DROP FOREIGN KEY my_key; 
ALTER TABLE my_table ADD CONSTRAINT my_key FOREIGN KEY ('some_id') 
REFERENCES some_new_table ('some_other_id') ON UPDATE CASCADE ON DELETE CASCADE; 
+0

あなたのコードは動作しますが、私は関連する質問があります。これら2つのクエリを1つのクエリに結合しようとすると、 'ALTER TABLE my_table DROP ...、ADD ...'エラーが発生しました:_errno:121 "書き込みまたは更新時に重複するキー" _。何か不足しているのですか、それとも実際にこれらのクエリを組み合わせることは不可能ですか? – iloo

2

mysqlコマンドプロンプトでhelp alter tableを実行し、出力が非常に自明です。
add constraintforeign keyと検索し、テーブルに適用します。

mysql> help alter table 
Name: 'ALTER TABLE' 
Description: 
Syntax: 
ALTER [IGNORE] TABLE tbl_name 
    alter_specification [, alter_specification] ... 

alter_specification: 
    ADD [COLUMN] column_definition [FIRST | AFTER col_name ] 
    | ADD [COLUMN] (column_definition,...) 
    | ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...) 
    | ADD [CONSTRAINT [symbol]] 
     PRIMARY KEY [index_type] (index_col_name,...) 
    | ADD [CONSTRAINT [symbol]] 
     UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) 
    | ADD [FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (index_col_name,...) 
    | ADD [CONSTRAINT [symbol]] 
     FOREIGN KEY [index_name] (index_col_name,...) 
     [reference_definition] 
    | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} 
    | CHANGE [COLUMN] old_col_name column_definition 
     [FIRST|AFTER col_name] 
    | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name] 
    | DROP [COLUMN] col_name 
    | DROP PRIMARY KEY 
    | DROP {INDEX|KEY} index_name 
    | DROP FOREIGN KEY fk_symbol 
    | DISABLE KEYS 
    | ENABLE KEYS 
    | RENAME [TO] new_tbl_name 
    | ORDER BY col_name 
    | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name] 
    | [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name] 
    | DISCARD TABLESPACE 
    | IMPORT TABLESPACE 
    | table_option ... 
2

私はで同じことを達成することができました:あなたが一緒に連鎖し、複数の外部キーを持っていて、errorno 15xで終わるエラーが出た場合、それは最も可能性の高い他のテーブルがあることを意味し

ALTER TABLE the_table_name 
    ADD CONSTRAINT the_name_of_column_you_want_to_use_as_foreign_key 
     REFERENCES other_table_primary_id (Column_name) 
2

あなたがドロップしようとしている外部キーに依存しています。

エラーが発生したときに外部キーを削除するには、SET FOREIGN_KEY_CHECKS = 0;を実行する必要があります。次に、他のテーブルを持たないテーブルに外部キーをドロップする必要があります。それで、チェーン内の次のテーブルに外部キーを正常にドロップすることができます。

完了したら、もう一度SET FOREIGN_KEY_CHECKS = 1;を実行してください。

関連する問題