コマンドラインを使用して、MySQL の既存のテーブルを変更し、外部キーを別のテーブルに設定する方法は?
39633 次
4 に答える
20
既存のものを削除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;
于 2012-06-17T18:24:31.030 に答える
3
コマンドプロンプトで実行help alter table
するmysql
と、出力は一目瞭然です。with句を
探して、テーブルに適用します。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 ...
于 2012-06-17T18:26:48.123 に答える
2
私は同じことを達成することができました:
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 )
于 2014-08-03T12:40:02.967 に答える
2
複数の外部キーが連鎖していて、それで終わるエラーが発生するerrorno 15x
場合は、削除しようとしている外部キーに依存する他のテーブルがあることを意味している可能性が最も高いです。
そのエラーが発生したときに外部キーを削除するにはSET FOREIGN_KEY_CHECKS = 0;
、それを行う必要があります。次に、最初に、それらに依存する他のテーブルを持たないテーブルの外部キーを削除する必要があります。その後、チェーン内の次のテーブルの外部キーを正常にドロップできます。
SET FOREIGN_KEY_CHECKS = 1;
完了したら、必ずもう一度実行してください。
于 2014-09-03T13:51:21.113 に答える