1

我正在创建一个社交网站,并在朋友表上工作,不知道我做错了什么。

我有一个users(userId,name - userId 是主键)和另一个名为friends(friend1,friend2,status)的表。friend1并且将更新和删除friend2的外键userId设置为级联表用户有一个条目,其中包含 134 作为 ID,我想将其更改为 3。我只是想看看这些东西是如何工作的。朋友表中有两行值为 143。如果我将 134 更改为 3,它不应该在更新时级联并更改朋友表中的这些值。我收到此错误

1451 - 无法删除或更新父行:外键约束失败 ( modionz1_nightspot/friends, CONSTRAINT friends_ibfk_1FOREIGN KEY ( friend1) REFERENCES users( userId))

顺便说一句,这两个表都是innodb。对这些概念的任何帮助将不胜感激。

4

1 回答 1

1

首先,级联更新对于任何期望有几百条记录的数据库来说都是一个非常糟糕的主意。如果您使用它并且拥有数千或数百万条子记录,那么您可以将整个系统锁定数小时。避免级联更新。正确的过程是添加你想要的父记录。然后更新子记录以反映该值而不是初始值,然后删除旧的父记录。然而,最好设计一个不需要更新 PK 的地方,这是许多人使用代理键的原因之一。

于 2010-08-31T18:47:24.927 回答