在MySQL中设置时如何修复重复密钥错误
我在一张桌子上做了以下操作:在MySQL中设置时如何修复重复密钥错误,mysql,duplicates,sql-update,Mysql,Duplicates,Sql Update,我在一张桌子上做了以下操作: UPDATE tname SET cname = cname + INTERVAL 8 HOUR; 在表中,cname列表示时间戳,并设置为主键。操作是将cname列的所有值加上8小时 但由于密钥重复,操作会收到错误消息。我不知道这到底是怎么发生的,但我猜有一列“cname”,它的值间隔为8小时。 因此,当它尝试添加8个小时并写入时,会出现重复密钥错误 我有两个问题: 如果操作出错,表是否不一致?我的意思是有些行加了8小时,有些行没有 如何在没有重复密钥错误的情
UPDATE tname
SET cname = cname + INTERVAL 8 HOUR;
在表中,cname列表示时间戳,并设置为主键。操作是将cname列的所有值加上8小时
但由于密钥重复,操作会收到错误消息。我不知道这到底是怎么发生的,但我猜有一列“cname”,它的值间隔为8小时。
因此,当它尝试添加8个小时并写入时,会出现重复密钥错误
我有两个问题:
ROLLBACK代码>如果有错误
更新本身正在创建副本;根据行的处理顺序,您可能会得到与现有值冲突的新值 一种常见的解决方法是使用
order by
:
UPDATE tname
SET cname = cname + INTERVAL 8 HOUR
ORDER BY cname desc;
查询首先更新最长日期,然后按降序处理行,以防止发生冲突。如果cname是主要的,则它有一个隐式唯一索引,因此如果存在另一条cname+8小时的记录,则会出现此错误。我认为更改主键是不好的表设计。
UPDATE tname
SET cname = cname + INTERVAL 8 HOUR
ORDER BY cname desc;