当副本是不同的唯一列时,如何在使用ON DUPLICATE KEY UPDATE时阻止MySQL自动递增主键?

时间:2010-08-08 01:56:57

标签: mysql key duplicates unique

考虑下表:

+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| vendor_id   | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| vendor_name | varchar(100)     | NO   | UNI | NULL    |                |
| count       | int(10) unsigned | NO   |     | 1       |                |
+-------------+------------------+------+-----+---------+----------------+

我有以下MySQL查询:

INSERT INTO `table` 
   (`vendor_name`) 
VALUES 
   ('foobar') ON DUPLICATE KEY UPDATE `count` = `count` + 1

此查询的目的是向表中插入新的供应商名称,如果供应商名称已存在,则列计数应增加1.但是当前列的主键也将是自动的-incremented。在这些情况下,如何防止MySQL自动递增主键?有没有办法用一个查询来做到这一点?

谢谢。

2 个答案:

答案 0 :(得分:1)

  

然而,当前列的主键也将自动递增。在这些情况下,如何防止MySQL自动递增主键?

当值已存在时使用UPDATE语句:

IF EXISTS(SELECT NULL
            FROM TABLE
           WHERE vendor_name = $vendor_name) THEN

    UPDATE TABLE
       SET count = count + 1
     WHERE vendor_name = $vendor_name

ELSE

    INSERT INTO TABLE
       (vendor_name)
    VALUES
       ($vendor_name

END IF

我尝试了替代ON DUPLICATE KEY UPDATE,REPLACE INTO:

REPLACE INTO vendors SET vendor_name = 'foobar', COUNT = COUNT + 1

它会更新计数,而vendor_id会更新......

数据库&如果数字不是连续的,则数据不关心,只是值是唯一的。如果你能接受它,我会使用ON DUPLICATE UPDATE语法虽然我承认行为很奇怪(考虑使用INSERT语句可以理解)。

答案 1 :(得分:1)

我认为这可能会这样做。但这与道教的原则非常相反 - 你真的反对这种道理。

可能有更好的解决方案。

INSERT INTO `table` 
   (`vendor_name`) 
VALUES 
   ('foobar') ON DUPLICATE KEY UPDATE `count` = `count` + 1, `vendor_id`=`vendor_id`-1