Oracle-数据操作与事务控制

涎涎原创约 1666 字大约 6 分钟...OracleOracle

29-Oracle数据操作与事务控制.mdopen in new window

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

  • 数据操作语言

    • Data Manipulation Language ,简称DML,主要用来实现对数据库表中的数据进行操作。

    • 数据操作语言主要包括如下几种:

      • 增加行数据:使用INSERT语句实现
      • 修改行数据:使用UPDATE语句实现
      • 删除行数据:使用DELETE语句实现
      • 合并行数据:按照指定条件合并两个表的数据,使用MERGE语句实现
  • 事务处理语言

    • 事务(Transaction)概念
      • 事务:也称工作单元,是由一个或多个SQL语句所组成的操作序列,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。在数据库中,通过事务来保证数据的一致性。

      • 事务处理语言:Transaction Process Language ,简称TPL,主要用来对组成事务的DML语句的操作结果进行确认或取消。确认也就是使DML操作生效,使用提交(COMMIT)命令实现;取消也就是使DML操作失效,使用回滚(ROLLBACK)命令实现。

      • 通过事务的使用,能防止数据库中出现数据不一致现象。如两个银行账户进行转账,涉及到两条更新操作,这两条更新操作只允许全部成功或失败,否则数据会出现不一致的现象。

  • 事务组成

    • 在数据库中,事务由一组相关的DML或SELECT语句,加上一个TPL语句(COMMIT、ROLLBACK)或一个DDLopen in new window语句(CREATE、ALTER、DROP、TRUNCATE等)或一个DCLopen in new window(GRANT、REVOKE)语句。
    • 例:如下语句组成两个事务。
      • INSERT….
      • UPDATE….
      • DELETE….
      • SELECT….
      • INSERT…
      • COMMIT;-- 前6条语句,组成第1个事务
      • UPDATE…
      • DELETE….
      • CREATE… ;--后3条语句,组成第2个事务
  • 事务特性

    • 事务特征可用四个字母的缩写表示:即ACID
      • 原子性(Atomicity)
        • 事务就像“原子”一样,不可被分割,组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况。
      • 一致性(Consistency)
        • 一旦事务完成,不管是成功的,还是失败的,整个系统处于数据一致的状态。
      • 隔离性(Isolation)
        • 一个事务的执行不会被另一个事务所干扰。比如两个人同时从一个账户从取钱,通过事务的隔离性确保账户余额的正确性。
      • 持久性(Durability)
        • 也称为永久性,指事务一旦提交,对数据的改变就是永久的,不可以再被回滚。
  • 事务结束

    • 显示结束
      • 提交(COMMIT):使用COMMIT命令实现,以成功的方式结束事务,组成事务的DML语句操作全部生效。
      • 回滚(ROLLBACK):使用ROLLBACK命令实现,以失败的方式结束事务,组成事务的DML语句操作全部被取消。
    • 隐式结束
      • 隐式提交:当下列任意一种情况发生时,会发生隐式提交

        • 执行一个DDL(CREATE、ALTER、DROP、TRUNCATE、RENAME)语句;
        • 执行一个DCL(GRANT、REVOKE)语句;
        • 从SQL*Plus正常退出(即使用EXIT或QUIT命令退出);
      • 隐式回滚:当下列任意一种情况发生时,会发生隐式回滚

        • 从SQL*Plus中强行退出
        • 客户端连接到服务器端异常中断
        • 系统崩溃
  • 事务开启

    • 事务自动开启于上一个事务结束后,执行的第一个DML语句。
    • 例如:
      • ….
      • COMMIT; --结束一个事务;
      • SELECT….
      • INSERT…. --开启一个事务
      • UPDATE….
      • DELETE….
      • SELECT….
      • INSERT…
      • COMMIT; --结束一个事务
      • UPDATE… --开启一个事务
      • DELETE….
      • ROLLBACK… ;--结束一个事务
  • 设置保存点

    • 设置保存点:如果在一个事务内,想要回滚到指定位置,不是回滚到事务的起始点,可以通过保存点(SAVEPOINT)来实现。
      • SAVEPOINT savepointname;--定义一个保存点语句;
      • ROLLBACK TO savepointname;--回滚到指定保存点
      • 注意:如上两条语句不结束事务的执行。

例:分析如下操作序列

DELETE FROM test ;
ROLLBACK;                        ——撤消DELETE操作
INSERT INTO test VALUES(’A’);
SAVEPOINT insert_a;            ——定义insert_a保存点
INSERT INTO test VALUES(’B’);
SAVEPOINT insert_b;             ——定义insert_b保存点
INSERT INTO test VALUES(’C’);
ROLLBACK TO insert_b;    ——撤消操作到insert_b保存点
DELETE FROM test WHERE test_str = ‘A’;
COMMIT;                            ——将所有修改写入数据库
ROLLBACK;    -—所有操作已经COMMIT提交,不能回滚
    • 锁的概念
    • 锁用来在多用户并发访问和操作数据库时,保证数据的一致性的一种机制;
    • 锁由Oracle自动管理,如一个DML操作,ORACLE默认的机制是在DML操作影响的行记录上自动加锁;
    • 锁在被相关的操作申请并持有后,会一直保持到事务的结束,事务结束后,锁才会被释放;
    • 查询语句不会锁定任何记录,如果在查询语句后面加FOR UPDATE子句会锁定查询所影响的行记录;
  • 提交或回滚前数据状态

    • 提交(COMMIT)或回滚(ROLLBACK)前的数据状态
      • 数据变化前的状态可以被恢复;
      • 当前会话可以使用SELECT语句来验证DML操作后的结果;
      • 其它会话不能查看由当前用户的DML操作结果;
      • 受影响记录被锁定,也就是其它用户不能改变受影响记录中的数据;
      • 在数据库中数据变化成为永久性的,先前的数据状态永久性的消失;
      • 所有用户/会话都可以查询到提交COMMIT后的结果;
      • 锁定的记录被释放,可以有效地被其他用户操作;
      • 所有的存储节点被清除;
  • 回滚(ROLLBACK)后的数据状态

    • 先前的数据状态被恢复;
    • 锁定的记录被释放;
    • 所有的存储节点被清除;

知识拓展

Oracle中DDL的基础知识open in new window

Oracle数据库PL SQL开发、Oracle-SQL开发习题答案open in new window

Oracle基础——DCL(数据控制语言)之Oracle权限open in new window

Oracle中的DDL,DML,DCL总结open in new window


分割线


相关信息

以上就是我关于 Oracle-数据操作与事务控制 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4