第九章《事务》

第九章《事务》

事务
多条sql语句的集合,要么都成功,要么都失败,事务基于存储引擎提供(innodb)
事务的特性ACID
A 原子性(atomicity):事务必须被视为一个不可分割的单元。
C 一致性(consistency):数据库从一种状态切换到另一种状态。
I 隔离性(isolation):事务在提交之前,对其他事务不可见。
D 持久性(durablity):一旦事务提交,所修改的数据永久保存到数据库。
在这里插入图片描述
在这里插入图片描述

开启事务
Start transaction
Begin
在这里插入图片描述
在这里插入图片描述
回滚事务
Rollback
在这里插入图片描述
提交事务
Commit
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述查看自动提交状态
Show variables like ‘autocommit’
开启第二次事务时,上一个事务将会被隐式提交
Set autocommit=0 关闭自动提交 =1 开启自动提交

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看自动提交状态
Show variables like ‘autocommit’
开启第二次事务时,上一个事务将会被隐式提交
Set autocommit=0 关闭自动提交 =1 开启自动提交
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
事务的四种隔离级别
1.read uncommitted(未提交读)
2.read committed(已提交读)
3.repeatable read (可重复读)
4.serializable(可串行读)

设置隔离级别的命令 : SET SESSION TX_ISOLATION=‘READ-UNCOMMITTED/READ-COMMITTED/REPEATABLE READ/SERIALIZABLE’

1.未提交读:
多个事务同时进行,一个事务在未提交时执行操作,对于其他事务是可见的,未提交读会产生脏读的问题,
在这里插入图片描述
在这里插入图片描述
另开终端进入mysql 别名b事务表
在这里插入图片描述
第九章《事务》
A事务
在这里插入图片描述
B
第九章《事务》
A
在这里插入图片描述
事务B修改了数据,但还未提交,这时候事务A就读到被事务B修改的数据,事务B进行回滚,然后事务A再次读到的数据和刚刚的不一致,事务A读到的事务B未提交的哪行数据就是脏读;
2. 已提交读:
多数数据库都将已提交读设置为默认隔离级别(mysql不是),一个事务对数据表进行的操作,
提交以后才对其他事务可见。它解决了脏读的问题。但是它会产生不可重复读的问题;

事务A:
mysql> SET SESSION TX_ISOLATION=‘READ-COMMITTED’;
Query OK, 0 rows affected (0.00 sec)

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM student1;
±—±———+
| id | name |
±—±———+
| 2 | zhangsan |
| 3 | zhangsi |
| 4 | zhangwu |
| 5 | zhangliu |
±—±———+
4 rows in set (0.00 sec)

事务B:
mysql> SET SESSION TX_ISOLATION=‘READ-COMMITTED’;
Query OK, 0 rows affected (0.00 sec)

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE student1 SET name=‘zhangqi’ WHERE id=5;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

事务A:查看
mysql> SELECT * FROM student1;
±—±———+
| id | name |
±—±———+
| 2 | zhangsan |
| 3 | zhangsi |
| 4 | zhangwu |
| 5 | zhangliu |
±—±———+
4 rows in set (0.00 sec)
事务B没有提交的修改,我们在事务A当中看不到;

事务B:提交事务
mysql> COMMIT;
Query OK, 0 rows affected (0.01 sec)

查看事务A:
mysql> SELECT * FROM student1;
±—±———+
| id | name |
±—±———+
| 2 | zhangsan |
| 3 | zhangsi |
| 4 | zhangwu |
| 5 | zhangqi |
±—±———+
4 rows in set (0.00 sec)
事务B提交了以后,事务A对提交结果可见,这样解决了未提交读的脏读问题,但是在事务
A当中查看到的事务B提交前后的内容发生变化,两次读的数据不一致了,这个问题叫做不可
重复读(也就事务A无法再读到事务B提交前的数据了)。

3.REPEATABLE(可重复度)
可重复读 终端1插入数据提交后,终端2提交后,才能看到插入后的数据
不存在脏读
幻读存在
不可重复读得到解决
AB
在这里插入图片描述
A
在这里插入图片描述
B查看
在这里插入图片描述
A
在这里插入图片描述
B
在这里插入图片描述
在这里插入图片描述
4. SERIALIZABLE(可串行读):
事务的最高隔离级别,它可以解决脏读、不可重复读、幻读的问题;但是设置这种隔离级别,
mysql处理事务的性能会下降,它一般很少用,只用于对数据一致性要求特别高的事务当中;
事务A:
mysql> SET SESSION TX_ISOLATION=‘SERIALIZABLE’;
Query OK, 0 rows affected (0.00 sec)

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM student2 WHERE id<7;
±—±————+
| id | name |
±—±————+
| 1 | zhaosi |
| 2 | zhaowu |
| 3 | zhaoliu |
| 6 | zhaoxiaosan |
±—±————+
4 rows in set (0.00 sec)

事务B:
mysql> SET SESSION TX_ISOLATION=‘SERIALIZABLE’;
Query OK, 0 rows affected (0.00 sec)

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO student2 VALUES(5,‘zhaolaoer’);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
//插入的id=5的数据,执行insert命令被阻塞了,过了超时时间之后返回错误信息;
原因是事务A对student的数据正在进行查询,student2表的相应字段被锁定,所以无法插入;
事务A提交了以后,事务B就可以正常插入数据了。

在这里插入图片描述

读锁(共享锁,s锁)
如果事务a对于表s加了读锁,其他事务可以继续对s 加读锁,但是不能加写锁,保证数据可以被读取,但是不能写入
写锁(排他锁,x锁)
如果事务a 对于表s 加了写入锁,其他事务不能对s加任何锁,除非a释放了对于s的加锁,保证其他事务对于s既不能读也不能写

事务保存点(仅对事务有效)
Savepoint 名字 对事务进行存档
读取保存点
Rollback to 保存点名字 回滚到指定位置的保存点
保存点只能存在于事务中,如果离开事务,保存点设置不成功,且保存点只能向前进行回滚,一旦回滚到之前的保存点,在其之后的保存点将会失效。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101969.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • poj 1011 Sticks (DFS+剪枝)

    poj 1011 Sticks (DFS+剪枝)

    2022年1月31日
    47
  • 渗透测试工具——SET「建议收藏」

    渗透测试工具——SET「建议收藏」社会工程学使用计谋、假情报或人际关系去获得利益和其他敏感信息。 攻击对象一-一人一-秘密信息的保存者,信息安全链中最薄弱的环节。 利用受害者的本能反应、好奇心、信任、贪婪等心理弱点进行欺骗、伤害。常见的社会工程学攻击方式环境渗透:对特定的环境进行渗透,是社会工程学为了获得所需的情报或敏感信息经常采用的手段之一。社会工程学攻击者通过观察目标对电子邮件的响应速度、重视程度以及可能提供的相关资料,比如一个人的姓名、生日、ID电话号码、管理员的IP地址、邮箱等,通过这些收集信息来判断目标的网

    2022年8月12日
    7
  • sqlserver创建视图索引「建议收藏」

    sqlserver创建视图索引「建议收藏」索引视图创建注意事项对视图创建的第一个索引必须是唯一聚集索引。创建唯一聚集索引后,可以创建更多非聚集索引。为视图创建唯一聚集索引可以提高查询性能,因为视图在数据库中的存储方式与具有聚集索引的表的存储方式相同。查询优化器可使用索引视图加快执行查询的速度。要使优化器考虑将该视图作为替换,并不需要在查询中引用该视图。索引视图中列的large_value_types_out_of_row选项的设置继承的是基表中相应列的设置。此值是使用sp_tableoption设置的。从表达式组成的列的默认设

    2022年7月22日
    9
  • 网络天才网页中文版_akinator官方版下载_akinator中文版在线玩-网络天才中文版下载网页版 – Win7旗舰版…

    《网络天才》(akinator),是一款在线猜谜类网页游戏,游戏将以阿拉伯神灯精灵阿拉丁出题方式展开,让你通过问题才出全部的人的心里想的人物,受到了不少玩家的喜爱。游戏玩法:玩家要想出一个人物,并回答问题,他就会猜到你想的人物。有什么它猜不到的人物都截图来分享吧。游戏原理:此类应用的大致流程都是:用户输入一段话(不一定只是单词)->后端语义引擎对用户输入的语句进行语义解析->推断用户最…

    2022年4月17日
    176
  • Python编程:从入门到实践(选记)「建议收藏」

    Python编程:从入门到实践(选记)「建议收藏」本文参考《 Python编程:从入门到实践》一书,作者: [美]EricMatthes第1章起步1.1搭建python环境在不同的操作系统中,Python存

    2022年7月6日
    33
  • 智能安防及视频监控系统

    智能安防及视频监控系统目录一、智能安防系统1、智能安防系统介绍2、安防系统相关工程二、视频监控系统1、视频监控系统分类2、视频监控系统组成3、视频监控系统的作用4、硬盘录像机NVR的基本功能5、硬盘录像机NVR设备结构6、视频监控设备主要厂商一、智能安防系统1、智能安防系统介绍安全防范系统成为了智慧城市与物联网行业应用中的一个非常重要的子系统。安防系统主要包括:视频监控系统、入侵报警系统、出入口控制系统、电子巡查系统以及智能停车场管理系统等5个子系统。AI人工智

    2022年7月15日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号