web-dev-qa-db-ja.com

コマンドラインを使用してMySQLテーブルの外部キーを変更する方法

コマンドラインを使用して、MySQLの既存のテーブルを変更し、外部キーを別のテーブルに設定するにはどうすればよいですか?

11
el ninho

既存のforeign keyを削除して、別の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; を作成する必要があります。たとえば、次のようになります。

__コード__
17
WojtekT

mysqlコマンドプロンプトでhelp alter tableを実行すると、出力は非常に自明です。
add constraint句を含むforeign 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 ...
3
Ravinder Reddy

複数の外部キーがチェーンされていて、errorno 15xで終わるエラーが発生した場合は、削除しようとしている外部キーに依存する他のテーブルがある可能性があります。

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

完了したら、必ずSET FOREIGN_KEY_CHECKS = 1;を再度実行してください。

2
Alex W

私は次の方法で同じことを達成することができました:

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
sokoya_philip