
1.插入新纪录
使用INSERT语句和VALUES子句一次插入一行:
insert into table_name(field1,field2...) values(value1,value2...);
省略字段名称,需要插入所有列的值,还要注意VALUES列表的顺序:
insert into table_name values(value1,value2,value3...);
2.插入默认值
为某些列设置了默认值,则需显示指定默认值:
insert into table_name(id) values(default);
对于既有非默认值又有默认值的表,只要不把设置了默认值的列写入INSERT列表,就能为它们插入默认值
3.使用null覆盖默认值
VALUES列表显示指定null,覆盖设置了默认值的field1列:
insert into table_name(field1,field2,...) values(null,value2,...);
4.复制数据到另一个表
在INSERT语句后面附加一个检索目标数据的查询语句:
insert into table1(field1,field2,...)
select field1,field2,... from table2 where condition1 and condition2...;
如果去掉WHERE条件,则复制table2的全部数据到table1
5.复制表定义
使用CREATE TABLE语句和一个不返回任何数据的子查询:
create table table1 as select * from table2 where 1=0;
如果WHERE子句不指定一个不可能为真的条件,table2的查询结果集将写到table1中
6.多表插入
使用INSERT ALL或者INSERT FIRST语句:
insert all
when condition1 then
into table1(field1,field2,...) values(value1,value2,...)
when condition2 then
into table2(field1,field2,...) values(value1,value2,...)
else
into table3(field1,field2,...) values(value1,value2,...)
select field1,field2,... from table_name;
使用ALL和FIRST关键字的区别:
当WHEN-THEN-ELSE的结果为真时,INSERT FIRST就立即结束评估,不执行后面的判断,而INSERT ALL会逐一执行每一条语句,不论前面的判断结果如何,因此INSERT ALL会把同一行数据插入到多个表
7.禁止插入特定列
创建一个视图,只暴露那些希望插入的列,然后强制所有INSERT语句都被传送到该视图:
create view view_name as select field1,field2,... from table_name;
insert into view_name(field1,field2,...) values(value1,value2,...);
8.更新记录
使用UPDATE语句更新已有记录:
update table_name set field1=value1 where condition;
如果省略WHERE子句,那么全部行都将被更新
9.合并记录(批量插入、更新)
使用MERGE INTO语句:
merge into table1 t1
using(select * from table2) t2 on (t1.field1=t2.field1)
when matched then
update t1.field2=value2
delete where condition
when not matched then
insert (t1.field1,t1.field2,...)
values (t2.field1,t2.field2,...);
10.删除全表记录
使用DELETE语句:
delete from table_name;
如果DELETE语句后面没有WHERE子句,则会删除全表记录,使用的时候要注意
11.删除指定记录或单行记录
delete from table_name where condition;
删除时要注意主键的唯一性约束条件,如果没有唯一性约束,WHERE子句还要确保不会误删记录
整理自《SQL经典实例》
网友评论