问:
例如,如果我有一个来自4个字段的组合键,我可以更新其中一个吗?
我是说我能执行这样的语句吗:

UPDATE tb
SET firstCol = '15', secondCol = 'test2'
WHERE firstCol = '1' AND serial = '2';

鉴于:
我的表名是:tb
我的领域是:firstCol, secondCol, serial
我的钥匙是:firstCol , serial
有什么建议吗?我错过了什么概念吗?
谢谢。

最佳答案

如果尝试将行排成与现有行相同的值,则可能会遇到更新问题。无论在更新中执行什么操作,唯一约束仍将应用。
如果有相关表并启用了级联更新,则在需要锁定许多记录时可能会出现锁定问题。如果没有启用级联更新,则可能会出现以下问题:在断开这些关系并将所有相关表手动更改为新值后再将它们放回去之前,无法更改主键。无论哪种方式,此任务都只能在非高峰时段以单用户模式完成。
就个人而言,如果需要更改pk,数据库的设计很脆弱,将来可能会出现问题。尤其是多列密钥。如果这是一个一次性的、罕见的改变,那就着手解决问题。否则,可能是时候决定在多列上使用代理项键作为主键和唯一索引是否是更好的选择了。多列pks不仅在主表上创建了更大的索引,而且在子表上也创建了更大的索引,当您需要更新其中一列时,它们可能会产生困难的问题,并且它们对连接具有性能影响。总的来说我不是他们的粉丝。当然,如果有一些列需要以任何频率更新(我指的是一年更新一次以上的大型更新——一个或两个记录可以,但是如果你一年运行一次以上的更新,你需要在我看来重新访问设计)。

07-24 09:38
查看更多