HUH函数
我知道这是个老生常谈的问题,但谷歌最近带领我来到这里,所以我想其他人也会来这里。@混沌是正确的:INSERT ... ON DUPLICATE KEY UPDATE语法。但是,最初的问题是关于MySQL的,在MySQL中有REPLACE INTO ...语法。IMHO,这个命令更容易使用,也更简单。从手册中:“替换”的工作方式与INSERT完全一样,但如果表中的旧行与主键或唯一索引的新行的值相同,则在插入新行之前删除旧行。注意,这不是标准SQL。手册中的一个例子:CREATE TABLE test ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, data VARCHAR(64) DEFAULT NULL, ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id));mysql> REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00');Query OK, 1 row affected (0.04 sec)mysql> REPLACE INTO test VALUES (1, 'New', '2014-08-20 18:47:42');Query OK, 2 rows affected (0.04 sec)mysql> SELECT * FROM test;+----+------+---------------------+| id | data | ts |+----+------+---------------------+| 1 | New | 2014-08-20 18:47:42 |+----+------+---------------------+1 row in set (0.00 sec)只是一个公平的警告REPLACE INTO不像UPDATE..就像手册上说的,REPLACE如果行存在,则删除该行,然后插入一个新行。(请注意上面示例中有趣的“2行受影响”。)也就是说,它将取代全现有记录的列(而不仅仅是更新)一些(纵队)MySQL的行为REPLACE INTO很像斯奎特的INSERT OR REPLACE INTO..看见这个问题对于某些解决方案,如果记录已经存在,则只想更新几个列(而不是所有列)。