INSERT ON DUPLICATE更新不相关的行

时间:2016-07-04 08:07:44

标签: mysql sql mariadb

我目前有一个包含3列的表,ID(主要ai),密钥(唯一二进制(32)),值(字符串),就是这样。 Key只是值的sha256二进制值。

我正在通过执行大量准备好的批量插入语句来测试我的数据库,每个语句随机都有1-200个值。我正在更新Value的原因是incase值以某种方式超时改变了,我总是希望Value匹配Key hash

INSERT INTO kv (key, value) VALUES (UNHEX(?), ?) ON DUPLICATE KEY UPDATE id=id, value = VALUES(value)

我的问题是在我查看我的数据库后插入一堆随机数据后,我的一些值被覆盖了,我不知道为什么。 sha256(“100”)的键可以随机赋值为“123”。只有少量我的数据不正确,但其中任何一个都不正确的事实很麻烦。

我为所有sql语句启用了mysqld日志记录,所有插入语句都显示Key:sha256(“100”)值:“100”被插入,永远不会出现“123”或任何不正确的数据出现在日志中,但在数据库中,这将是不正确的值。

我的问题是我的数据与我的陈述不符?

我已经尝试清空我的数据库并逐个单独地重新运行所有语句,并且我的所有数据都保持正确。

我不确定应该怎样或者如何寻找问题所在,我尝试了MariaDB 10.0.26和10.1.14,两次都遇到了这个问题。

(从评论中添加)

CREATE TABLE IF NOT EXISTS ip_raw (
    id int(10) unsigned NOT NULL AUTO_INCREMENT, 
    tokenhash binary(32) NOT NULL, 
    tokenvalue varchar(45) COLLATE utf8mb4_bin NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY token (tokenhash)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=1 ; 

0 个答案:

没有答案