Oracle数据库:事务问题

1、事务

​ 事务是指作为单个逻辑工作单元执行的一组相关操作。这些操作要么全都执行,要么全都不执行使用事务是为了保证数据的安全有效

事务有一下四个特点:(ACID)

  • 原子性(Atomic):一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。

  • 一致性(Consistence):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

  • 隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰

  • 持久性(Durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

当事务之间发生并发时有几个隔离级别:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdWOsY9a-1584423625866)(Oracle笔记图片/1584400605944.png)]

  • 丢失更新:两个事务同时存储, 一个存储 100 , 一个存储 200,最终可能至存储了200 或者 100,那另一个的更新就没成功,即结果不为预想的 300

  • 脏读:事务 T1 更新了一行数据,还没有提交所做的修改,T2 读取更新后的数据,T1回滚,T2 读取的数据无效,这种数据称为脏读数据。

  • 不可重复读:事务 T1 读取一行数据,T2 修改了 T1 刚刚读取的记录,T1 再次查询,发现与第一次读取的记录不相同,称为不可重复读。

  • 幻读:事务 T1 读取一条带 WHERE 条件的语句,返回结果集,T2 插入一条新纪录,恰好也是 T1 的 WHERE 条件,T1 再次查询,结果集中又看到 T2 的记录,新纪录就叫做幻读。

Oracle 默认的隔离级别是 read committed。

Oracle 支持上述四种隔离级别中的两种:read committed 和 serializable。除此之外,

Oralce 中还定义 Read only 和 Read write 隔离级别。

Read only(只读):事务中不能有任何修改数据库中数据的操作语句,是 Serializable 的一个子集。

Read write(读写):它是默认设置,该选项表示在事务中可以有访问语句、修改语句,但不经常使用。

1.1、事务的开启

对数据执行增、删、改时自动开启事务。

1.2、关闭事务

  • 操作数据库成功
    • 正常执行完成的 DDL 语句:create、alter、drop
    • 正常执行完 DCL 语句 GRANT、REVOKE
    • 正常退出的 SQLPlus 或者 SQL Developer 等客户端
    • 如果人工要使用隐式事务,SET AUTOCOMMIT ON (只针对一个连接)
    • 手动提交 :使用 commit
  • 失败
    • rollback ,手动回滚
    • 非法退出 意外的断电

注意:rollback操作只能针对未提交的数据库操作,已提交的数据已经持久化到数据库中了,无法撤销。

发布了11 篇原创文章 · 获赞 16 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_37663871/article/details/104920177