MySQL的bug?python执行时传入了正确的语句,但是却出现了插入了错误的数据

发布于 2022-09-06 04:00:23 字数 1743 浏览 55 评论 0

具体的如图所示吧,绿色的命令行是在window10下运行的,白色的是在Ubuntu下运行的,都出现了同样的问题

图片描述
图片描述
可能看的不大清楚,但是可以看到我的sql语句是INSERT INTO db_fan VALUES (1763252334, 2273317832)····ON DUPLICATE KEY UPDATE uid = uid AND fan_id = fan_id
可是最后却报了一个主键冲突的错误。
主要是两个地方有疑惑。

  • 首先如果是主键冲突,那么应该报 Duplicate entry (1763252334-2273317832) for key 'PRIMARY',不应该是图中的Duplicate entry (1-2273317832) for key 'PRIMARY'

  • 其次,我为了防止主键冲突,在SQL语句中加入了ON DUPLICATE KEY UPDATE uid = uid AND fan_id = fan_id。这样也不大可能会有主键冲突的错误报出丫?

我的表构造的应该没有任何问题,如下所示。
图片描述

然后这个SQL语句是在python执行前直接打出来的。我用的是python3.6,使用pymysql对数据库进行操作。数据库版本如下所示。
谢谢大家了。这个问题困扰了我很久了。
图片描述
如果在window下查看数据库的内容的话,可以看到一条正确一条错误的记录,如下
图片描述

但是在ubuntu下查看,却只有一条错误的记录
图片描述
图片描述

如果我直接拿前面的sql语句丢到mysql里执行,会出现一样的问题。可是如果我不批量的插入记录,单个单个的插入就不会有任何的问题。
可是单个单个的插入之后,再次插入,也会产生同样的问题。
所以我也是很绝望了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沉鱼一梦 2022-09-13 04:00:23

ON DUPLICATE KEY update uid = uid AND fan_id = fan_id

绿光 2022-09-13 04:00:23

确认是有问题,我测了一下也是这样,两列字段的表,两列一起作为主键
我看了下数据知道为什么报的是(1-2273317832)而不是(1763252334-2273317832)
因为INSERT INTO db_fan VALUES (1763252334, 2273317832)····ON DUPLICATE KEY UPDATE uid = uid AND fan_id = fan_id这条sql如果表里没有这条记录正常插入,如果已经有了这条记录就会将(1763252334, 2273317832)更新成(1, 2273317832),这时候是不报错的,这时候如果你再次插入(1763252334, 2273317832)的话就会报(1-2273317832)的主键冲突,因为INTO db_fan VALUES (1763252334, 2273317832)····ON DUPLICATE KEY UPDATE uid = uid AND fan_id = fan_id这条sql实际上冲突之后把第一个字段值设为了1,原因还不知道。希望有知道的小伙伴来解惑一下

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文