济南企业网站制,营销型网站建设哪家好,云商城之歌,海南省住房公积金管理局电话号码目录
一、事务的概念
二、事务的ACID特点
1#xff09;事务的原子性
2#xff09;事务的一致性
3#xff09;事务的隔离性
#xff08;1#xff09;脏读
#xff08;2#xff09;不可重复读
#xff08;3#xff09;幻读
#xff08;4#xff09; 丢失更…目录
一、事务的概念
二、事务的ACID特点
1事务的原子性
2事务的一致性
3事务的隔离性
1脏读
2不可重复读
3幻读
4 丢失更新
事务的隔离级别
1未提交读Read UncommittedRU
2提交读Read Committed RC)
3可重复读Repeatable ReadRR——mysql默认的隔离级别
4串行读serializable——相当于锁表
4持久性
三、事务级别的查看与设置
1全局变量事务级别的查询
方法一模糊查询显示
方式二select语句查询
2variables变量事务级别查询 3设置事务的隔离级别 (1)设置全局事务隔离级别
2设置会话事务隔离级别
临时设置
四、事务控制语句
1最简单事务的流程操作
1开始事务而不提交事务
2开始事务并提交事务 3提交读的隔离级别防止脏读
1未提交事务的两台同连接显示
2提交事务后两台同连接数据表显示
4重复读rr的隔离级别的作用演示
1未提交事务同连接数据表
2提交后同连接的数据表
5回滚事务的设置演示
1默认回滚
2根据设置的标记点进行回滚
五、SQL语句的事务设置
1自动提交开启的演示
2关闭自动提交事务后的 sql语句
总结
事务的ACID特性
原子性(Atomicity)
一致性(Consistency )
隔离性(Isolation)
持久性(Durability)
事务之间的相互影响
事务的隔离级别
查询全局事务隔离级别
查询会话事务隔离级别
设置全局事务隔离级别
设置会话事务隔离级别
事务控制语句
使用 set 设置控制事务 一、事务的概念
事务是一种机制、一个操作序列包含了一组数据库操作命令并且把所有的命令作为一个 整体一起向系统提交或撤销操作请求即这一组数据库命令要么都执行要么都不执行事务是一个不可分割的工作逻辑单元在数据库系统上执行并发操作时事务是最小的控制单元事务适用于多用户同时操作的数据库系统的场景如银行、保险公司及证券交易系统等等事务通过事务的整体性以保证数据的一致性事务能够提高在向表中更新和插入信息期间的可靠性
总的来说事务 就是一种机制包含了一组操作命令会作为一个不可分割的整体要么都执行要么都不执行 它保证了数据库的安全可靠性
二、事务的ACID特点
ACID是指在可靠数据库管理系统(DBMS) 中事务(transaction)应该具有的四个特性原子性(Atomicity) 、一致性(Consistency )、隔离性(Isolation) 、持久性(Durability) 。这是可靠数据库所应具备的几个特性
1事务的原子性
原子性的最大作用就是保证事务的整体性避免外界因素对原本数据更改执行的影响
原子性事务是一个不可再分割的工作单位事务中的操作要么都发生要么都不发生
事务是一个完整的操作事务的各元素是不可分的事务中的所有元素必须作为一个整体提交或回滚如果事务中的任何元素失败则整个事务将失败
eg 比如在银行中进行转账这边已经转款成功结果此时因外界因素中断对方的余额并未增加而自己的账户扣款就属于重大的数据事故。所以必须保证转帐的整个过程是一体的要么转账成功按预计发生变化。要么转账失败双方余额保持不变
2事务的一致性
一致性指在事务开始之前和事务结束以后数据库的完整性约束没有被破坏。
当事务完成时数据必须处于一致状态 在事务开始前数据库中存储的数据处于一致状态在正在进行的事务中数据可能处于不一致的状态当事务成功完成时数据必须再次回到已知的一致状态
eg对银行转帐事务不管事务成功还是失败应该保证事务结束后表中A和B的存款总额跟事务执行前一致。例如A的账户有1000元B的账户有1000元现在A转账200元给B不管事务成功还是失败转账前后A和B的存款总额都应该是2000元。
3事务的隔离性
隔离性指在并发环境中当不同的事务同时操纵相同的数据时每个事务都有各自的完整数据空间
对数据进行修改的所有并发事务是彼此隔离的表明事务必须是独立的它不应以任何方式依赖于或影响其他事务修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据或者在另一一个使用相同数据的事务结束之后访问这些数据也就是说并发访问数据库时一个用户的事务不被其他事务所干扰各并发事务之间数据库是独立的
当多个用户进行同时操作 如果不存在隔离性的事务就会出现以下状况
1脏读 当一个事务正在访问数据并且对数据进行了修改而这种修改还没有提交到数据库中这时另外一个事务也访问这个数据然后使用了这个数据 2不可重复读
指在一个事务内多次读同一数据。 在这个事务还没有结束时另外一个事务也访问该同一数据。那么在第一个事务中的两次读数据之间由于第二个事务的修改那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一一个事务内两次读到的数据是不一样的因此称为是不可重复读。( 即不能读到相同的数据内容) 3幻读
一个事务对一个表中的数据进行了修改这种修改涉及到表中的全部数据行。同时另一个事务也修改这个表中的数据这种修改是向表中插入一行新数据。 那么操作前一个 事务的用户会发现表中还有没有修改的数据行就好象发生了幻觉一样 4 丢失更新
两个事务同时读取同一条记录A先修改记录B也修改记录(B不知道A修改过)B提交数据后B的修改结果覆盖了A的修改结果 事务的隔离级别
事务的隔离级别决定了事务之间可见的级别
MySQL事务支持如下四种隔离用以控制事务所做的修改并将修改通告至其它并发的事务
1未提交读Read UncommittedRU
允许脏读即允许一个事务可以看到其他事务未提交的修改
2提交读Read Committed RC)
允许一个事务只能看到其他事务已经提交的修改未提交的修改是不可见的。防止脏读
3可重复读Repeatable ReadRR——mysql默认的隔离级别
确保如果在一个事务中执行两次相同的SELECT语句都能得到相同的结果不管其他事务是否提交这些修改。可以防止脏读和不可重复读
4串行读serializable——相当于锁表
完全串行化的读将一个事务与其他事务完全地隔离。每次读都需要获得表级共享锁读写相互都会阻塞。可以防止脏读不可重复读取和幻读事务串行化会降低数据库的执行效率
隔离级别脏读取不可重复读幻像读未提交读允许允许允许已提交读禁止允许允许可重复读禁止禁止对 InnoDB 禁止串行读禁止禁止禁止
4持久性
持久性在事务完成以后该事务所对数据库所作的更改便持久的保存在数据库之中并不会被回滚
指不管系统是否发生故障事务处理的结果都是永久的一旦事务被提交事务的效果会被永久地保留在数据库中
三、事务级别的查看与设置
variables 指变量 global variables 指全局变量
1全局变量事务级别的查询
方法一模糊查询显示
show global variables like %isolation%;
注释 like表示模糊查询 %isolation%表示包含isolation字符串 isolation%以isolation字符串开头 %isolation以isolation字符串结尾 方式二select语句查询 SELECT global.tx_isolation; 2variables变量事务级别查询
session variables 指会话变量 show session variables like %isolation%; #方法一 SELECT session.tx_isolation; #方法二 SELECT tx_isolation; #方法三 3设置事务的隔离级别 (1)设置全局事务隔离级别 set global transaction isolation level 隔离级别;
可设置的级别有
未提交读Read UncommittedRU提交读Read Committed RC)可重复读Repeatable ReadRR串行读serializable——相当于锁表 临时设置
set global.tx_isolation隔离级别; #重启mysql服务后失效必须使用大写如READ-COMMITTED
set global tx_isolation隔离级别; #重启mysql服务后失效必须使用大写如REPEATABLE-READ
2设置会话事务隔离级别
会话事务隔离级别只对当前连接有效退出连接后失效。在其他终端连接无效
再次连接后会恢复为全局事务的隔离级别
set session transaction isolation level 隔离级别; 临时设置 set session.tx_isolation隔离级别; #退出连接后失效必须使用大写如READ-COMMITTEDset session tx_isolation隔离级别; #退出连接后失效必须使用大写如READ-COMMITTED
四、事务控制语句
BEGIN 或 START TRANSACTION 显式地开启一个事务COMMIT 或 COMMITWORK 提交事务并使已对数据库进行的所有修改变为永久性的ROLLBACK 或 ROLLBACK WORK 回滚会结束用户的事务并撤销正在进行的所有未提交的修改SAVEPOINT S1 使用SAVEPOINT 允许在事务中创建一个回滚点一个事务中可以有多个SAVEPOINT“S1”代表回滚点名称ROLLBACK TO [SAVEPOINT] S1 把事务回滚到标记点
为以下操作提前准备一个简单的数据表 create table if not exists cost(id int(4),name char(5),rmb double ); 1最简单事务的流程操作
一个事务的完整完成的过程中只要有一个begin事务起始标志和commit事务提交
1开始事务而不提交事务 2开始事务并提交事务
将全局变量和variables的隔离级别设置为 未提交读 脏读演示开启多连接mysql模拟两个同时进行的操作 3提交读的隔离级别防止脏读
1未提交事务的两台同连接显示 事务A第一个连接 事务B第二个连接 2提交事务后两台同连接数据表显示
事务A第一个连接 事务B第二个连接 4重复读rr的隔离级别的作用演示
测试前准备 1未提交事务同连接数据表
事务A第一个连接 事务B第二个连接 2提交后同连接的数据表
事务A 事务B 5回滚事务的设置演示
1默认回滚 2根据设置的标记点进行回滚
SAVEPOINT S1 使用SAVEPOINT 允许在事务中创建一个回滚点一个事务中可以有多个SAVEPOINT“S1”代表回滚点名称。ROLLBACK TO [SAVEPOINT] S1 把事务回滚到标记点。
节点保存操作 指定的事务回滚操作 五、SQL语句的事务设置
默认情况下每一个sql语句就是一个事务即一条语句的执行就完成了一个事务。默认情况下数据的设置是自动提交事务
show variables like autocommit;show variables like AUTOCOMMIT; #查看当前会话的AUTOCOMMIT值show global variables like AUTOCOMMIT; #查看全局事务的AUTOCOMMIT值 1自动提交开启的演示 set AUTOCOMMIT1; #开启自动提交仅针对当前会话Mysql默认为1
set global AUTOCOMMIT1; #开启自动提交针对全局事务Mysql默认为1 2关闭自动提交事务后的 sql语句 set AUTOCOMMIT0; #禁止自动提交仅针对当前会话set global AUTOCOMMIT0; #关闭自动提交针对全局事务Mysql默认为1 总结
事务的ACID特性 原子性(Atomicity) 一致性(Consistency ) 隔离性(Isolation) 持久性(Durability)
这是可靠数据库所应具备的几个特性
事务之间的相互影响
当多个客户端并发地访问同一个表时可能出现下面的一致性问题
脏读不可重复读幻读丢失更新
事务的隔离级别
未提交读Read UncommittedRU 允许脏读提交读Read Committed RC) 防止脏读可重复读Repeatable ReadRR—mysql默认的隔离级别防止脏读和不可重复读串行读serializable—相当于锁表可以防止脏读、不可重复读和幻读事务串行化会降低数据库的执行效率
查询全局事务隔离级别
show global variables like %isolation%select global.tx_isolation;
查询会话事务隔离级别
show session variables like %isolation%;select session.tx_isolation;select tx_isolation;
设置全局事务隔离级别
set global transaction isolation level 隔离级别 #永久生效示例 set global transaction isolation level read committed;
设置会话事务隔离级别
set session transaction isolation level 隔离级别 #退出连接后失效示例set session transaction isolation level read committed;
事务控制语句
BEGIN 或 START TRANSACTION 显式地开启一个事务COMMIT 或 COMMITWORK 提交事务并使已对数据库进行的所有修改变为永久性的ROLLBACK 或 ROLLBACK WORK 回滚会结束用户的事务并撤销正在进行的所有未提交的修改SAVEPOINT S1 使用SAVEPOINT 允许在事务中创建一个回滚点一个事务中可以有多个SAVEPOINT“S1”代表回滚点名称ROLLBACK TO [SAVEPOINT] S1 把事务回滚到标记点
使用 set 设置控制事务
set autocommit0 #禁止自动提交仅针对当前会话
set autocommit1 #开启自动提交仅针对当前会话Mysql默认为1
set global autocommit0 #禁止自动提交针对全局事务
set global autocommit1 #开启自动提交针对全局事务Mysql默认为1
show variables like autocommit; #查看当前会话的autocommit值
show global variables like autocommit; #查看全局事务的autocommit值