SQL语句的类型描述与DML语句
SQL语句的类型:
DQL:数据查询语言select(官方未定义)
DML:数据操作语言,insert、 delete、 update
DDL:数据定义语言,create、 drop、 truncate、 alter table
DCL:数据控制语言,grant、 revoke
DML:
一、增加数据insert
1、语句:insert into 表名 (字段名1,字段名2,......) values(字段值1,字段值2,......)
2、举例:从student表中添加一行数据:insert into student(stuno,stuname,stuaddress,stuid) values(4,'赵六','北京市海淀区',2);
insert into student values(5,'老七','上海市浦东新区',1); --若插入的字段值符合全部字段,可以不写字段名
3、注意:字段名和字段值一一对应
批量插入数据:
1、创建新表(批量插入到之前不存在的表)
例如:student表复制到mystudent表中:create table mystudent as select * from student;
也可以复制一部分数据到新表:create table mystudent2 as select stuname,stuaddress from student;
只要表结构,不要数据:create table mystudent3
2、在旧表中插入(已存在的表)
例如:insert into mystudent3(stuno,stuname,stuaddress,stuid) select stuno,stuname,stuaddress,stuid from student;
3、begin ... end
begin
insert into emp
values(1221,'LISI','MANAGER',7788,'19-9月 -88',9998,1000,10);
insert into emp
values(1223,'LISI','MANAGER',7788,'19-9月 -88',9998,1000,10);
end ;
二、删除数据
1.语句:delete from 表名 where 条件判断;
2.注意:要加上where,否则是删除整表的数据
扩展:
全表删除:
delete from emp; 可以回退
truncate table emp; 不能回退
1.原因:Oracle中的DML语句默认未提交事务,可以通过rollback回退操作
2.执行时间对比:
通过set timing on打开执行时间监听器,得出结论
对于少量数据,delete执行效率高,一行一行删除
对于海量数据,truncate执行效率高,首先丢弃整张表,然后重新创建表
3.delete支持闪回,truncate不支持闪回
4.delete不会释放空间(换个地方存储数据,相当于回收站),truncate会释放空间(相当于彻底删除)
5.delete会产生碎片,truncate不会产生碎片
如何处理碎片? a. alter table 表名 move;
b. 导入导出
三、修改数据
1.语句:update 表名 set 字段名1=字段名2, ... where ...;
2.例如:将学生id为5的学生的名字改为“小明”,课程序号改为5:update student set stuname = '小明', stuno = 3 where stuid = 5;
3.注意:要加上where,否则修改整列的数据!