DML
添加insert操作
- 地址符&
就相当与preparestatement中的?,但是更加灵活,可用于列名输入,表名输入等,只需要输入正确的格式即可 - 一次插入多条记录
使用子查询插入多条记录,当海量插入数据时不建议使用该方法,可以使用1.数据泵(PLSQL程序)dbms_datapump(程序包);2.sql*loader;3.外部表
//emp10中批量插入数据
create table emp10 as select * from emp;
insert into emp10 select * from emp;
- oracle插入数据的方式
从后往前插入
修改update操作
1 update emp10
2 set deptno = (select deptno from emp where empno=7369)
3 , job = (select job from emp where empno=7369)
4* where empno = 7788
删除操作
不加where条件的删除就是删除整张表,他与truncate table实现数据的清空有什么不同
- delete删除的数据可以rollback,也可以闪回(flashback,其实是一种恢复,oracle中非常有特色的技术,当事务提交成功后要撤销)
delete删除可能产生碎片(会影响查询的速度),并且不释放空间;truncate会释放空间
- 去掉碎片alter table<表名> move;
- mysql数据的导出和导入
mysqldump -hip -uroot -ppassword dbname >d:ddd.sql(导出);
source d:aaa.sql(导入,这是登录mysql数据库);mysql -hip -uname -ppassword dbname< filename.sql 这样也行 - oracle数据的导出和导入(dmp二进制文件)
exp导出 expdp增强
imp导入 impdp增强
- truncate是先摧毁表结果,再重构表结构;delete是逐条删除
- (*)delete是DML语句,truncate是DDL语句;DML可以回滚,DDL是不可以回滚的
注意:在mysql中是truncate语句快,而在oracle中是delete语句快,原因在于oracle中特别重要的undo技术
测试oracle中delete和truncate语句的执行效率
oracle中的事务,oracle中事务是自动开启的
- 提交:commit
- 回滚:rollback
- 开始标志:事务中的第一条语句
结束标志:
-
提交:
- 显示提交:commit
- 隐式提交:正常退出,DDL,DCL操作
回滚
- 显示回滚:rollback
- 隐式回滚:非正常退出,掉电等
设置保存点
- 语法:savepoint a;rollback to savepoint a;//回滚到a保存点
事务的隔离级别
oracle中支持sql99中的两个隔离级别,并附带一个隔离级别,默认为Read Commit- READ COMMITED(读已提交数据)
- SERIALIZABLE(串行化)
- READ ONLY
- 设置事务的隔离级别
set transaction read only;
- 验证事务的隔离级别
关于伪列rownum
注意:
1.rownum只能使用<,<=,不能使用>,>=,因为rownum永远从1开始,不能跳过
2.只能使用默认的数据
相关子查询
主查询的结果作为参数传递给子查询
oracle中表的分类
- 标准表
- 索引表
- 临时表
临时表的两种创建方式
1.手动创建 create global temporary table xxx
2.自动创建,当排序时创建
临时表的作用:
在一次会话中或者事务中,临时表的数据会自动删除