MySQL 自4.1版以后开始支持INSERT … ON DUPLICATE KEY UPDATE语法,使得原本需要执行3条SQL语句(SELECT,INSERT,UPDATE),缩减为1条语句即可完成。 例如ipstats表结构如下: 代码如下: CREATE TABLE ipstats ( ip VARCHAR(15) NOT NULL UNIQUE, clicks SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' );
原本需要执行3条SQL语句,如下: 代码如下: IF (SELECT * FROM ipstats WHERE ip='192.168.0.1') { UPDATE ipstats SET clicks=clicks+1 WHERE ip='192.168.0.1'; } else { INSERT INTO ipstats (ip, clicks) VALUES ('192.168.0.1', 1); }
而现在只需下面1条SQL语句即可完成: 代码如下: INSERT INTO ipstats VALUES('192.168.0.1', 1) ON DUPLICATE KEY UPDATE clicks=clicks+1;
注意,要使用这条语句,前提条件是这个表必须有一个唯一索引或主键。 总结如下: 1.如果表中不存在主键记录,replace和insert*update都与insert是一样的特点。 2.如 果表中存在主键记录,replace相当于执行delete 和 insert两条操作,而insert*update的相当于执行if exist do update else do insert操作。因此,如果replace填充的字段不全,则会导致未被更新的字段都会修改为默认值,并且如果有自增id的话,自增id会变化为最新的 值(这样如果是以自增id为标志的话可能导致记录丢失);而insert*update只是更新部分字段,对于未被更新的字段不会变化(不会强制修改为默 认值)。 多条记录操作: 代码如下: insert into t(a,b,c) values ('a1','b1','c1'),('a2','b2','c2') on duplicate key update t.c=values(t.c)
您可能感兴趣的文章:
mysql下普通索引和唯一索引的效率对比
MySQL批量插入遇上唯一索引避免方法
mysql 中存在null和空时创建唯一索引的方法
MySQL中的唯一索引的简单学习教程
深入mysql "ON DUPLICATE KEY UPDATE" 语法的分析
Mysql中Insert into xxx on duplicate key update问题
MySQL的Replace into 与Insert into on duplicate key update真正的不同之处
mysql insert的几点操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )