前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >oracle基础|什么是事务控制|事务的ACID原则|什么是不可重复读、幻影读、脏读

oracle基础|什么是事务控制|事务的ACID原则|什么是不可重复读、幻影读、脏读

作者头像
小小鱼儿小小林
发布2021-12-28 10:30:12
5770
发布2021-12-28 10:30:12
举报
文章被收录于专栏:灵儿的笔记

目录

一、事务控制

二、事务的ACID原则

1.原子性:

2.一致性:

3.隔离性:

不可重复读:

幻影读:

脏读:

4.持久性:

三、隐式事务提交

四、事务提交或者回滚之前的状态

五、显示结束事务


一、事务控制

当一个sql命令执行一个事务就开始了,当遇到以下情况,事务自动完成

1.commit或者rollback

2.DDL或者DCL命令执行

3.错误,退出,或者系统崩溃

说明:

commit:提交事务,提交事务是指让这个事务里面的所有操作都生效到数据库中

rollback:回滚事务,回滚事务是指让这个事务里面的所有操作都撤销

测试: 使用两个终端窗口,同一个账号登录到数据库中,观察事务是否提交对用户查看数据的影响

注:一个用户对A表某一列做了DML操作,但是没有提交事务,这时候别的用户是不能对A表这一列再做其他的DML操作。(为了保证数据的安全和一致性)

例如1:

insert ....产生事务A

update ... 这个操作是事务A中的操作

insert .. 这个操作是事务A中的操作

commit; 让事务A里面的三个操作生效、事务A结束

delete ... 产生新的事务B

insert .. 这个操作是事务B中的操作

insert .. 这个操作是事务B中的操作

insert .. 这个操作是事务B中的操作

rollback; 让事务B中的四个操作都撤销,事务B结束

例如2:

insert ....产生事务A

update ... 这个操作是事务A中的操作

insert .. 这个操作是事务A中的操作

DDL语句; 事务A会被提交

rollback; 这时候回滚已经对事务A不起作用,因为事务A以及被提交了

注:create语句 drop语句 alter语句等属于DDL语句

事务控制使用:commit,savepoint,rollback;

二、事务的ACID原则

1.原子性:

要不全成功,要不全失败

2.一致性:

从一个一致性状态到达另外一个一致性状态

3.隔离性:

事务之间互不影响

第一类丢失更新:事务A撤销事务时,将事务B已经提交的事务覆盖了。

第二类丢失更新:

事务A和事务B同时修改某行的值,

1.事务A将数值改为1并提交

2.事务B将数值改为2并提交。

这时数据的值为2,事务A所做的更新将会丢失。

不可重复读:

在同一事务中,两次读取同一数据,得到内容不同

事务1:查询一条记录

-------------->事务2:更新事务1查询的记录

-------------->事务2:调用commit进行提交

事务1:再次查询上次的记录

此时事务1对同一数据查询了两次,可得到的内容不同,称为不可重复读

幻影读:

同一事务中,用同样的操作读取两次,得到的记录数不相同

事务1:查询表中所有记录

-------------->事务2:插入一条记录

-------------->事务2:调用commit进行提交

事务1:再次查询表中所有记录

此时事务1两次查询到的记录是不一样的,称为幻读

脏读:

事务A读到事务B未提交的数据。

为了处理这些问题,SQL标准定义了以下几种事务隔离级别

READ UNCOMMITTED 幻想读、不可重复读和脏读都允许。

READ COMMITTED 允许幻想读、不可重复读,不允许脏读

REPEATABLE READ 允许幻想读,不允许不可重复读和脏读

SERIALIZABLE 幻想读、不可重复读和脏读都不允许

Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。所以Oracle不支持脏读

4.持久性:

事务提交后,能够持久性影响数据库。

三、隐式事务提交

1.DDL语句(create..),执行commit

2.DCL语句(gant....),执行commit

3.正常退出终端。

说明:如果系统崩溃,或者sqlplus不正常退出,事务回滚。

四、事务提交或者回滚之前的状态

1.因为数据库缓存区的存在,数据前一次的状态可以被回复

2.当前用户可以会看使用DML操作的数据的结果,但是其他用户不能看到当前用户的DML操作结果

3.所有受影响的行会被锁定,其他用户不能修改。

五、显示结束事务

commit:之前所做的所有会影响数据库的操作,都会对数据库产生持久的影响。

rollback:取消之前所做的所有操作

note:事务一旦提交,不能rollback

savepoint: 保存回滚点

savepoint point_name;

rollback to point_name;回滚到指定的标记点。标记点之后所做的所有操作都会被取消,但是之前的不受影响。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、事务控制
  • 二、事务的ACID原则
    • 1.原子性:
      • 2.一致性:
        • 3.隔离性:
          • 不可重复读:
          • 幻影读:
          • 脏读:
        • 4.持久性:
        • 三、隐式事务提交
        • 四、事务提交或者回滚之前的状态
        • 五、显示结束事务
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档