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;

YO@{DA)_DM5%G4SGVGM0IP2.png

  • 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实现数据的清空有什么不同

    1. delete删除的数据可以rollback,也可以闪回(flashback,其实是一种恢复,oracle中非常有特色的技术,当事务提交成功后要撤销)
    2. 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增强
    3. truncate是先摧毁表结果,再重构表结构;delete是逐条删除
    4. (*)delete是DML语句,truncate是DDL语句;DML可以回滚,DDL是不可以回滚的

注意:在mysql中是truncate语句快,而在oracle中是delete语句快,原因在于oracle中特别重要的undo技术
测试oracle中delete和truncate语句的执行效率
SMMXN_`7)YJQR_B$7H87C~D.png

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;

  • 验证事务的隔离级别
    )617U5(2770DTT}[~_~HKM5.png

关于伪列rownum

注意:
1.rownum只能使用<,<=,不能使用>,>=,因为rownum永远从1开始,不能跳过
2.只能使用默认的数据

相关子查询

主查询的结果作为参数传递给子查询

oracle中表的分类

  • 标准表
  • 索引表
  • 临时表
    临时表的两种创建方式
    1.手动创建 create global temporary table xxx
    2.自动创建,当排序时创建

临时表的作用:
在一次会话中或者事务中,临时表的数据会自动删除