gpt4 book ai didi

mysql - 出现 'Duplicate entry' 错误,即使我正在使用 ON DUPLICATE KEY UPDATE

转载 作者:搜寻专家 更新时间:2023-11-01 00:12:03 27 4
gpt4 key购买 nike

我目前正在做一个项目,我要处理数以千计的数据包。现在,我记录每个数据包的 IP 和 MAC 地址以及一些其他信息。为了存储所有这些,我使用 MySQL 并且我的脚本是用 Node.js 编写的。目前我每秒处理超过 40k 个数据包,因此数据库流量非常大。现在,棘手的部分是 IP 和 MAC 地址应该链接在一起,这样它们在表中只存在一次。因此,我将它们都设置为 UNIQUE。但是,当我查询数据库时出现错误:

Error: ER_DUP_ENTRY: Duplicate entry 'ff:ff:ff:ff:ff:ff' for key 'mac_UNIQUE'

即使我正在使用 ON DUPLICATE KEY UPDATE,它也会吐出错误。我的数据库是这样设置的:

delimiter $$

CREATE TABLE `hosts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(45) NOT NULL DEFAULT '',
`mac` varchar(45) NOT NULL DEFAULT '',
`method` varchar(45) DEFAULT NULL,
`netbiosName` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ip_UNIQUE` (`ip`),
UNIQUE KEY `mac_UNIQUE` (`mac`)
) ENGINE=InnoDB AUTO_INCREMENT=1862 DEFAULT CHARSET=latin1$$

这是我在 Node.js 中使用 node_mysql 库进行的查询:

mysqlConnection.query('INSERT INTO ' + mysqlTable + ' (ip, mac, method) VALUES(?, ?, ?) ON DUPLICATE KEY UPDATE ip=?, mac=?, method=?',
[ipAddress, macAddress, method, ipAddress, macAddress, method]);

我真的想不出让这个工作的方法。

更新:出于多种原因,我认为使用 IP 地址作为 UNIQUE 键可能更好。但问题仍然存在,这可能吗?

最佳答案

基于这篇文章http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

一般来说,您应该尽量避免在具有多个唯一索引的表上使用 ON DUPLICATE KEY UPDATE 子句。

插入尝试用您当前的 IP 替换现有 IP,但随后无法将 MAC 放入您的数据库中。例如,您有一条 IP 为 127.0.0.1 的记录。并且您有一条 MAC 地址为“ff:ff:ff:ff:ff:ff”的记录 您插入一 strip 有此 IP 和 MAC 地址“ff:ff:ff:ff:ff:ff”的新记录。 MySQL 将 IP 记录更新为相同的 IP - 127.0.0.1,但无法完成更新,因为该 MAC 地址已存在于数据库中。

希望我解释得很好 :)

如果 IP 地址与 MAC 地址的关系是 1:1,则他们应该使用复合 key ,然后您可以进行重复 key 更新。

关于mysql - 出现 'Duplicate entry' 错误,即使我正在使用 ON DUPLICATE KEY UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618313/

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