MySQL之 INSERT ... ON DUPLICATE KEY UPDATE

1、insert or update需求

      需求:若是test_table中存在记录则update,不存在则insert。java

2、老作法:3条sql     

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,直接在数据库层作处理,少了不少在业务层的判断。数据库

3、使用 on duplicate key update:1条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

相关文章
相关标签/搜索