我有一个很大的mysql表(20万条记录),我使用Replace和where进行了更新。我运行它并更新了大部分记录,但是当我重新运行桌面上的Select和备份时,我仍然有6或7条记录显示与之前的556相比。为了防止我重新运行Update语句,它更新了0条记录,然后只是从
更改了它Update TableA set FieldA=Replace(FieldA,'1 ','1st ') where FieldA like '%1 %'
到
Select FieldA,Replace(FieldA,'1 ','1st ') where FieldA like '$1 %'
select找到迷路6记录和替换按预期执行。我不清楚更新是如何工作的。
更新:在审核时,我意识到我在表格中添加了一个唯一键,其中包含该字段。当我第一次尝试运行更新时,我收到了该错误,然后我以Update IGNORE
运行。我认为这意味着它会忽略密钥并进行更新,它是否只是意味着它没有更新会导致欺骗但由于IGNORE而转移到下一条记录的记录?
答案 0 :(得分:1)
正如update command上的mysql文档所说:
使用IGNORE关键字,即使更新期间发生错误,update语句也不会中止。不更新在唯一键值上发生重复键冲突的行。更新为导致数据转换错误的值的行将更新为最接近的有效值。
所以,是的,ignore关键字会导致所描述的行为。使用show warnings
命令查看更新忽略语句引起的警告。