gpt4 book ai didi

MySQL 更新行为

转载 作者:行者123 更新时间:2023-11-29 07:16:01 24 4
gpt4 key购买 nike

mysql> update tablename set fieldname = 'C200900674' 其中字段名 -'C200900673';

错误 1062 (23000): key 1 的重复条目“C200900674-2008-0-1”

对此有什么想法或建议吗?我们有人不小心用减号而不是等号进行了更新。它显然试图更改所有小于该值的记录?尽管它是字母数字的,而且确实相当不完整。最重要的是,在出现该错误之前更新了大量记录,并且根本没有反馈。没有像“查询正常,受影响的 X 行(0.00 秒)”这样的内容,因此我们不知道更改了多少。 autocommit=1 所以没有回滚的能力。

无论如何,只是寻找与此有关的任何提示或指示。为什么那个查询根本没有任何,它看起来真的应该向我返回一个错误。当然,除了不允许没有经验的管理员做愚蠢的事情这一显而易见的答案之外。

最佳答案

每当对 Mysql 如何解释 WHERE 子句有疑问时,将其反转为 SELECT。

SELECT fieldname - 'C200900673' FROM tablename;

和:

SELECT fieldname FROM tablename WHERE fieldname - 'C200900673';

查看第一个选择返回的值,以及第二个选择找到的行。

可悲的是,因为 Mysql 在数字/字符串转换上相当松懈,特别是在 4.x 系列上,甚至在非严格的 5.x 上,哎呀......即使是严格模式,也很难说到底发生了什么没有你的 Mysql 配置的所有细节是错误的。可能是因为字段名被转换为某个数字,'C200900673' 也是如此,基本上运行:

update tablename set fieldname = 'C200900674' where NUMBER - NUMBER;

可以翻译成:

update tablename set fieldname = 'C200900674' where 1;

无论如何,我希望你有备份!

关于MySQL 更新行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/887629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com