内容简介:原子性:强调事务的不可分割 一致性:强调的是事务的执行的前后,数据的完整性要保持一致 隔离性:一个事务的执行不应该受到其他事务的干扰 持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库脏读:一个事务读到另一个事务还没有提交的数据 不可重复读:一个事务读到了另一个事务已经提交的update数据,导致在当前的事务中多次查询数据不一致 虚读/幻读:一个事务读到另一个事务已经insert数据,导致当前事务中多次查询结果不一致引发两类丢失更新
原子性:强调事务的不可分割 一致性:强调的是事务的执行的前后,数据的完整性要保持一致 隔离性:一个事务的执行不应该受到其他事务的干扰 持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库
二、如果不考虑隔离性,会引发一些安全性问题
读问题 复制代码
脏读:一个事务读到另一个事务还没有提交的数据 不可重复读:一个事务读到了另一个事务已经提交的update数据,导致在当前的事务中多次查询数据不一致 虚读/幻读:一个事务读到另一个事务已经insert数据,导致当前事务中多次查询结果不一致
写问题 复制代码
引发两类丢失更新
三、解决引发的读问题
设置事务的隔离级别 read uncommitted :未提交读。脏读,不可重复读,虚读都可能发生 read committed :已提交读。避免脏读,不可重复读和虚度有可能发生 repeatable read :可重复读。避免脏读和不可重复读,虚读可能发生 serializable :串行化的。避免脏读,不可重复读,虚读的发生
select @@tx_isolation; 查看隔离级别 set session transaction isolation level 级别; 设置隔离级别 复制代码
四、演示读问题
演示脏读 复制代码
1.分别开启两个dos窗口 A.B 2.先查看两个窗口的隔离级别 select @@tx_isolation; 3.设置A窗口的隔离级别为未提交读
set session transaction isolation level read uncommitted; 复制代码
4.分别在两个窗口开启事务
start transaction; 复制代码
5.分别开启两个dos窗口 A.B
update account set money = money - 1000 where name = '张森'; update account set money = money + 1000 where name = '凤姐'; 复制代码
6.在A窗口查询数据select * from account; -- A事务读到了B事务还没有提交的数据;
演示避免脏读,演示不可重复读发送 复制代码
1.分别开两个窗口,A.B 2.设置A窗口的隔离级别:read committed
set session transaction isolation level read committed; 复制代码
3.分别在两个窗口开启事务 start transaction; 4.在B窗口完成转账
update account set money = money - 1000 where name = '张森'; update account set money = money + 1000 where name = '凤姐'; 复制代码
5.在A窗口进行查询
select * from account; -- 避免脏读 复制代码
6.在B窗口提交事务
commit; 复制代码
7.在A窗口中再次查询
select * from account; 转账成功.(不可重复读:一个事务读到另一个事务中已经提交的update的数据,导致多次查询结果不一致.) 复制代码
避免脏读和不可重复读,演示虚读 复制代码
1.分别开启两个窗口,A.B 2.设置A窗口的隔离级别: repeatable read
set session transaction isolation level repeatable read; 复制代码
3.分别在两个窗口中开启事务
start transaction; 复制代码
4.在B窗口完成转账的操作
update account set money = money - 1000 where name = '张森'; update account set money = money + 1000 where name = '凤姐'; 复制代码
5.在A窗口查询
select * from account; -- 转账没有成功:避免脏读. 复制代码
6.在B窗口提交事务
commit; 复制代码
7.在A窗口再次查询
select * from account; -- 转账没有成功:避免不可重复读. 复制代码
避免虚读 复制代码
1.分别开启两个窗口,A.B 2.设置A窗口的隔离级别:repeatable read
set session transaction isolation level repeatable read; 复制代码
3.分别在两个窗口中开启事务
start transaction; 复制代码
4.在B窗口完成插入操作
insert into account values (null,'王老师',10000) 复制代码
5.在A中进行查询操作
select * from account; -- 没有查询到任何结果 复制代码
6.在B窗口提交事务
commit; -- A窗口马上就会显示数据 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 数据库事物的四大特性(ACID)及事物隔离级别
- SpringBoot事物管理
- 事物分析和问题解决(200421)
- MySql 事物及隔离级别
- Redis 事物源码阅读:watch
- AI神经网络如何辨别事物
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高等应用数学问题的MATLAB求解
薛定宇、陈阳泉 / 清华大学出版社 / 2008-10 / 49.00元
薛定宇和陈阳泉编著的《高等应用数学问题的MATLAB求解》首先介绍了MATLAB语言程序设计的基本内容,在此基础上系统介绍了各个应用数学领域的问题求解,如基于MATLAB的微积分问题、线性代数问题的计算机求解、积分变换和复变函数问题、非线性方程与最优化问题、常微分方程与偏微分方程问题、数据插值与函数逼近问题、概率论与数理统计问题的解析解和数值解法等,还介绍了较新的非传统方法,如模糊逻辑与模糊推理、......一起来看看 《高等应用数学问题的MATLAB求解》 这本书的介绍吧!
JSON 在线解析
在线 JSON 格式化工具
Markdown 在线编辑器
Markdown 在线编辑器