如何删除mySQL中引用多列的外键
mysql
如何删除mySQL中引用多列的外键,mysql,foreign-keys,Mysql,Foreign Keys,我有一个外键,它引用子表中的两列。我想删除外键,但mySQL只是挂起mysql删除表,什么也没发生:以下是“显示创建表\u名称”的输出:关键FK_动物指数(动物类型、食物指数),约束FK_动物索引外键(动物类型、食物索引)参考动物种类表(动物种类、食物指数)引擎=InnoDB我已尝试使用以下方法删除此外键:`ALTER TABLE table_name DROP FOREIGN KEY FK_animal_index;``ALTER TABLE table_name DROP FOREIGN
我有一个外键,它引用子表中的两列。我想删除外键,但mySQL只是挂起,什么也没发生:
以下是“显示创建表\u名称”的输出:
关键FK_动物指数(动物类型、食物指数),
约束FK_动物索引外键(动物类型、食物索引)
参考动物种类表(动物种类、食物指数)
引擎=InnoDB
我已尝试使用以下方法删除此外键:
`ALTER TABLE table_name DROP FOREIGN KEY FK_animal_index;`
`ALTER TABLE table_name DROP FOREIGN KEY animal_type;`
ALTER TABLE section\u configuration DROP外键FK\u animal\u index,
下拉键(动物类型、食物索引)代码>
及
ALTER TABLE section\u configuration DROP FOREIGN KEY
FK\u animal\u index
,添加约束FK\u animal\u type FOREIGN KEY(animal\u type)REFERENCES
animal\u schedules
(
animal\u type
)ON DELETE SET NULL代码>
其他人提到,未设置ON DELETE会阻止您更改键值(如果ON DELETE未设置为任何值,mySQL将拒绝更改)
但是没有用,mySQL只是挂起,30分钟后仍然什么都没有。数据库目前非常小,因此删除FK应该很快。这个问题的答案根本不是关于主键。
我不得不停止我的程序访问该表,以便对其进行修改。
在mySQL db中,您可以随时添加表和列,但如果要更改列或删除列,任何程序都不能使用它,否则它将无限期挂起。我猜它正在等待访问表。如果有任何未完成的事务在其他会话中运行,ALTER TABLE必须等待它们完成,然后才能开始对该表执行任何操作。这称为元数据锁。任何查询了该表并未提交其事务的会话都可以无限期地阻止ALTER表。是的,看起来您是正确的。我可以插入、更新和选择记录,但在停止任何程序访问数据库之前,我无法更改表。我停止了我的程序并使用:ALTER TABLE section_configuration DROP FOREIGN KEY FK_animal_index,ADD CONSTRAINT FK_animal_type外键(animal_type)在DELETE SET NULL上引用animal_schedules(animal_type)代码>成功了。非常感谢Karwin先生
(编辑:91站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|