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里执行,会出现一样的问题。可是如果我不批量的插入记录,单个单个的插入就不会有任何的问题。
可是单个单个的插入之后,再次插入,也会产生同样的问题。
所以我也是很绝望了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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,原因还不知道。希望有知道的小伙伴来解惑一下