--一次性插入多条记录(批量插入)。 不用写values子句,用子查询代替values子句。(子查询的列要和插入的表的列保持对应)
insert into emp10 select * from emp where deptno=10; --批量插入,如果插入海量数据效率低
海量插入数据:
1、数据泵(PLSQL程序)
dbms_datapump(程序包)
2、SQL*Loader
3、外部表
delete和truncate的区别 (Oracle中truncate快,MySql中delete快。原因:Oracle有undo数据(还原数据)的功能)
1、delete逐条删除;truncate先摧毁表 再重建2
2、(*)delete是DML truncate是DDL
(可以回滚) (不可以回滚)
3、delete不会释放空间 truncate会
4、delete会产生碎片 truncate不会
5、delete可以闪回(flashback) truncate不可以 (flashback其实是一种恢复)
alter table 表名 move; --去掉碎片 (数据的导入和导出也可以去掉表中的碎片 exp/imp)
set feedback off; --关闭sql语句执行结果提示信息。
@D:\MyData.sql; --执行外部sql脚本
Oracle中的事务
1、起始标志: 事务中的第一条DML语句(insert、delete、update、select)
2、结束标志:显式提交:commit 隐式提交: 正常退出或 DDL 或 DCL (DDL语句不能回滚,因为本身就是提交)
显式回滚:rollback 隐式回滚: 非正常退出 掉电 宕机
set transaction read only; --设置事务隔离级别(read only是Oracle专有的隔离级别(只能进行查询操作))
savepoint a; --事务保存点
rollback to savepoint a; --回滚到事务指定的保存点