我的数据库有表ip(地址,计数),如果在DB中找到地址,我想更新'count'值,否则添加新记录。我这样做:
INSERT INTO ip(address,count)
VALUES('0.0.0.1', 3)
ON DUPLICATE KEY UPDATE count=count+VALUES(count);
但结果是有这个表:
+----+---------+-------+
| id | address | count |
+----+---------+-------+
| 1 | 0.0.0.1 | 3 |
| 2 | 0.0.0.1 | 3 |
| 3 | 0.0.0.1 | 3 |
+----+---------+-------+
`id` int(50) NOT NULL AUTO_INCREMENT,
`address` varchar(40) DEFAULT NULL,
`count` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
为什么不总和'计数',但总是创造新记录?如何更改主键?
答案 0 :(得分:0)
您是否真的在地址栏中创建了唯一键?如果还没有,则ON DUPLICATE KEY UPDATE子句将永远不会运行,因此将继续创建行。
您是否可以更新您的问题以包含该表的架构?
答案 1 :(得分:0)
您需要将ADDRESS
标记为UNIQUE键才能生效。
从文件中引用
如果指定ON DUPLICATE KEY UPDATE,则插入一行 会导致UNIQUE索引或PRIMARY KEY中的重复值 执行旧行的更新
答案 2 :(得分:0)
使用以下查询
创建表格CREATE TABLE `ip` (
`id` INT(50) NOT NULL AUTO_INCREMENT,
`address` VARCHAR(40) NULL DEFAULT NULL,
`count` VARCHAR(10) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `address` (`address`)
)
然后使用以下查询插入
INSERT INTO ip(address,`count`) VALUES('0.0.0.1', 3)
ON DUPLICATE KEY UPDATE `count`=`count`+1;
在这种情况下,如果表已包含该ip,则count将增加1。
请注意,address
列应为UNIQUE index
或PRIMARY KEY
,否则无效。在我的创建表查询中,我将address
设置为唯一。