mysql - 当重复项是不同的唯一列时,如何防止 MySQL 在使用 ON DUPLICATE KEY UPDATE 时自动递增主键?

标签 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。这可行,但当前列的主键也将是 auto -增加。在这些情况下如何防止 MySQL 自动递增主键?有没有一种方法可以通过一个查询来做到这一点?

谢谢。

最佳答案

This works however the primary key of the current column will also be auto-incremented. How can I prevent MySQL from auto-incrementing the primary key in these cases?

当值已经存在时使用 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 语句是可以理解的)。

关于mysql - 当重复项是不同的唯一列时,如何防止 MySQL 在使用 ON DUPLICATE KEY UPDATE 时自动递增主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3432787/

相关文章:

删除 R 中的重复行(基于 2 列)

php - UTF-8贯穿始终

java - 速度打印值及其键

mysql - 哪个 MYSQL Join 包含不存在的记录

dictionary - 如何使用键索引向字典分配/添加项目?

dictionary - 如何防止将类型用作映射键?

python - 根据特定列值从其他行填充列值

sql查询在多列上不同

php - 评论的发布数据未传输至查询

php - 如何将一些数据发布到 mySQL 服务器