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

具体的如图所示吧,绿色的命令行是在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里执行,会出现一样的问题。可是如果我不批量的插入记录,单个单个的插入就不会有任何的问题。
可是单个单个的插入之后,再次插入,也会产生同样的问题。
所以我也是很绝望了。

阅读 4.5k
2 个回答

ON DUPLICATE KEY update uid = uid AND fan_id = fan_id

确认是有问题,我测了一下也是这样,两列字段的表,两列一起作为主键
我看了下数据知道为什么报的是(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,原因还不知道。希望有知道的小伙伴来解惑一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏