如何使用命令行更改MySQL表的外键

问题描述 投票:9回答:4

如何使用命令行更改MySQL中的现有表,将外键设置为另一个表?

mysql alter-table alter
4个回答
16
投票

你必须放弃现有的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;

2
投票

help alter table命令提示符下执行mysql,输出非常自我解释。 使用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 ...

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 )

2
投票

如果您将多个外键链接在一起并且您得到以errorno 15x结尾的错误,则很可能意味着还有其他表依赖于您尝试删除的外键。

要在出现错误时删除外键,您需要执行SET FOREIGN_KEY_CHECKS = 0;,然后必须先将外键放在没有任何其他依赖于它们的表的表上。然后,您可以成功地将外键放在链中的下一个表中,依此类推。

完成后,请确保再次运行SET FOREIGN_KEY_CHECKS = 1;

© www.soinside.com 2019 - 2024. All rights reserved.