如果其中一个字段是重复的,则更新Mysql

时间:2014-01-22 11:25:46

标签: mysql sql database

我的数据库有表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`)

为什么不总和'计数',但总是创造新记录?如何更改主键?

3 个答案:

答案 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 indexPRIMARY KEY,否则无效。在我的创建表查询中,我将address设置为唯一。