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优先