您的位置:首页 > 数据库 > MySQL

MySql避免重复插入sql语句

2017-02-21 16:02 411 查看
恶补下Mysql中的几个特殊sql语法,避免面试过程中被人问到,答不上来
1、ignore(primary key)
用例:
insert ignore into user_table(id,name,age) values(1,'wpf',20);
若记录已经存在,则忽略本次操作,返回影响行为0,否则执行插入操作,返回影响行为1
2、replace(primary key)
用例:
replace into user_table(id,name,age) values(1,'xiaoming',20);
若记录已经存在,则删除老的记录,插入此新的记录,否则直接插入,返回值表示插入和删除的记录总和,例如用例中已经存在了,则返回的影响行数为2
3、on duplicate key update(primary key | unique索引)
用例:
insert into user_table(id,name,age) values(1,'lisi',23) on duplicate key update age= values(age) + 1;
若记录已经存在,则执行后面的update操作,否则执行插入操作
存在执行的等价操作为:
update user_table set age = 24 where id=1;
若name行也有索引,则执行的等价操作为:
update user_table set age = 24 where id=1 or name='lisi' limit 1;
4、delayed
用例:
insert delayed into user_talbe(id,name,age) values(1,'wpf',20);
立即返回执行结果,但真正的插入操作被延缓执行了,只有在服务器发现没有读取操作时才会从延迟队列中读取并执行插入操作。
5、内联(inner join)
用例:
select * from T1 inner join T2 on T1.uid=T2.uid;
等价操作:
select * from T1,T2 where T1.uid=T2.uid;
6、左外连接(left outer join),右外连接(right outer join),全外连

接(full outer join)
用例:
select * from T1 left outer join T2 on T1.uid=T2.uid;
T1表全显示,并补全显示T2.uid=T1.uid的信息,若T2中不存在则显示NULL
select * from T1 right outer join T2 on T1.uid=T2.uid;
T2表全显示,并补全显示T1.uid=T2.uid的信息,若T1中不存在则显示NULL
select * from T1 full outer join T2 on T1.uid=T2.uid;
T2,T1全显示,若T1.uid=T2.uid,则合并一行显示,否则显示T1 NULL / T2 NULL
7、组合(union)
用例:
select uid,name from t1 union select uid,name from t2 order by uid;
将两个查询结果合并显示,若不想去重可以使用union all。注意使用union时要求两个select查询的信息相同,包括字段名,字段类型(若可相互转换也可以),聚合函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql sql