需求:若是test_table中存在记录则update,不存在则insert。java
select * from test_table where id = 1; //查询表中是否已有记录 insert into test_table (id,name) values(1,'may'); //记录不存在,执行insert update test_table set name = 'may' where id = 1; //记录存在,执行update
先查询一次,判断记录是否存在;若是不存在,则插入记录;若是存在,则更新记录。在数据量不大的状况下,不存在效率问题,可用。sql
可是,数据量一旦很大,效率则会很低,且会出现数据并发的问题,例如:数据重复,甚至跑到内存溢出。等等。而使用 “on duplicate key update"在数据量大的状况下,效率明显高不少。只有一个sql,直接在数据库层作处理,少了不少在业务层的判断。数据库
使用 on duplicate key update,1条sql能够搞定上面3条sql所作的事情,且效率更高。 并发
insert into test_table (id,name) values(1,'may') on duplicate key update name = values(name);
【前提:on duplicate key update 的使用必须有一个 惟一索引 或者 主键】spa