日期:2014-05-16  浏览次数:20404 次

Insert语句的几个提高效率的特殊用法
我们做Insert操作的,经常要判断insert的条件是否满足。一般的做法,都会先执行一条判断语句,然后再执行insert语句,下面的方法可以帮助你节省第一条判断语句,把这两者结合到一起完成。

测试表:  create table ccc (id int primary key, name varchar(100));

1. on duplicate key update columnName=value

insert into ccc values (1,'cc') on duplicate key update name=concat(name,'-b');

避免了不必要的duplicate检查,尤其在进行统计累加的时候,

比如对于所有登录进来的ID进行累加:

insert into ccc values (idxx,1) on duplicate key update count=count+1;



2. insert的where not exists:

当某个条件不满足,或不满足的的时候,决定是否执行插入

insert into ccc (id,name) select 60,'cc' from dual where not exists (select null from ccc where id>5);





2. ignore

稍微有点不同,他是如果有duplicate,那么就直接ignore这次insert

insert ignore into ccc values (1,'cc');



3. Delayed

Delayed 采用缓冲,insert后不立刻插入,放入队列,等待数据表没有其他读的线程的时候,再刷入。

数据在缓冲的时候,select是读取不到的

并且如果发生冲突,是检查不到的




4. High_priority Low_Priority

用来强制跳过服务器设置的规则, 有些设置 update 比select优先, 有些设置了select优先