vas*_*ino 5 mysql key unique duplicates
请考虑下表:
+-------------+------------------+------+-----+---------+----------------+
| 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 | |
+-------------+------------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
我有以下MySQL查询:
INSERT INTO `table`
(`vendor_name`)
VALUES
('foobar') ON DUPLICATE KEY UPDATE `count` = `count` + 1
Run Code Online (Sandbox Code Playgroud)
此查询的目的是向表中插入新的供应商名称,如果供应商名称已存在,则列计数应增加1.但是当前列的主键也将自动递增.在这些情况下,如何防止MySQL自动递增主键?有没有办法用一个查询来做到这一点?
谢谢.
这是可行的,但是当前列的主键也会自动递增。在这些情况下如何防止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
Run Code Online (Sandbox Code Playgroud)
我尝试了 ON DUPLICATE KEY UPDATE, REPLACE INTO 的替代方法:
REPLACE INTO vendors SET vendor_name = 'foobar', COUNT = COUNT + 1
Run Code Online (Sandbox Code Playgroud)
它更新了计数和vendor_id,所以情况更糟......
数据库和数据并不关心数字是否不连续,只关心值是唯一的。如果您可以忍受这一点,我会使用 ON DUPLICATE UPDATE 语法,尽管我承认这种行为很奇怪(考虑使用 INSERT 语句是可以理解的)。