DML(Data Manipulation Language)数据操纵语言
insert delete update
可以回退——可以进行事务操作
SQL> set linesize 300;
SQL> set pagesize 300;
一、insert
insert into 表明(字段名1,字段名2,……) values(字段值1,字段值2,……)
字段名和字段值一一对应:数据类型、个数、顺序
SQL> insert into mytab1(id,name,age) values(1,'w',18);
--全表插入可以省略字段名,但是必须是完整字段、字段值要和表的顺序一致。
SQL> insert into mytab1 values(2,'c',18);
--插入字段不完整,需要写出字段名
SQL> insert into mytab1(name,age) values('q',16);
--动态插入:
SQL> insert into mytab1(id,name,age) values(&1,&2,&age);
输入 1 的值: 5
输入 2 的值: 'j'
输入 age 的值: 12
原值 1: insert into mytab1(id,name,age) values(&1,&2,&age)
新值 1: insert into mytab1(id,name,age) values(5,'j',12)
已创建 1 行。
SQL> insert into mytab1(id,name,&othername) values(2,'j',&othervalues);
输入 othername 的值: age
输入 othervalues 的值: 1
原值 1: insert into mytab1(id,name,&othername) values(2,'j',&othervalues)
新值 1: insert into mytab1(id,name,age) values(2,'j',1)
已创建 1 行。
批量插入
创建新表(新表不存在)
SQL> create table mytab2 as select * from mytab1;
SQL> create table mytab3 as select id,name from mytab2;
--快速创建表结构:只有列的信息,但是不要表数据
SQL> create table mytab4 as select * from mytab3 where 1=0;
批量插入到已经存在的表
SQL> insert into mytab4 select * from mytab3;
begin…end…(存储过程)
begin
insert into mytab1(id,name,age) values(1,'w',18);
insert into mytab1(id,name,age) values(2,'q',16);
end;
/
海量数据:数据泵、SQL Loader/外部表
二、delete 删除
--整个表数据全删:
SQL> delete from mytab4;
--撤回
SQL> rollback;
--条件删除
SQL> delete from mytab1 where id=2;
全部删除
-
delete from 表名; 可以回退
-
一行一行的删除。数据量小的时候,删除效率高
-
支持闪回
-
不会释放空间:换个地方存储数据(undo空间,相当于回收站)
-
会产生碎片:整理碎片
-
alter table 表名 move;
将表自动整理并合并(多个小空间集合成一个大空间)
-
导出导入:
-
-
-
truncate table 表名; 不能回退
- 先drop整张表,再重新创建表。数据量打时效率高
- 不支持闪回
- 释放空间:数据彻底没了
- 不会产生碎片
测试性能
打开执行时间
SQL> set timing on/off
三、update
update 表名 set 字段名1=字段值1,字段名2=字段值2,……(where……)
没有where修改整张表
SQL> update mytab1 set id=10 where id=1;