【发布时间】:2020-01-10 14:41:23
【问题描述】:
我创建了两个表并想设置一个 one_to_many 关系。
我首先在表 'tappa' 上创建了一个主键 tappa_id,然后在表 low_cost_hotels 上创建了一个外键 tappa_id。
然后我将表 tappa 的名称更改为 leg。
我想重命名第一个表中的主键和引用它的第二个表中的外键,但我总是出错。我想知道问题是否是由于它们已经相互连接:
我写了以下代码来删除表中的主键legs-->
ALTER TABLE legs DROP COLUMN tappa_id ;
并收到此错误消息(FrancigenaApp 是包含表的数据库的名称)->
ERROR 1025 (HY000): Error on rename of './FrancigenaApp/#sql-33c0_26' to './FrancigenaApp/legs' (errno: 150)
我写了下面的代码来删除连接到表low_cost_hotels中前一个(tappa_id)的外键:
ALTER TABLE low_cost_hotels DROP FOREIGN KEY tappa_id;
并得到错误:
ERROR 1025 (HY000): Error on rename of './FrancigenaApp/low_cost_hotels' to
'./FrancigenaApp/#sql2-33c0-27' (errno: 152)
我想我需要在重命名主键之前删除外键,但我不能这样做,而且这似乎不是 SQL 语法中的错误...
【问题讨论】:
-
是的,您需要暂时删除外键,然后重命名列并创建新的外键。我发现当我需要这样做时,我会将数据库编写成一个 SQL 文件(包括模式和数据),然后编辑 SQL 文件并重新创建数据库。这解决了问题,并具有压缩新数据库的额外好处。
-
使用
SET FOREIGN_KEY_CHECKS = 0;。重命名列。然后SET FOREIGN_KEY_CHECKS = 1;
标签: mysql sql foreign-keys primary-key alter-table