长沙网站推广有哪些啊,静态网页模板免费下载网站,企业信用信息网查询系统官网,苏州专业网站制作设计2019独角兽企业重金招聘Python工程师标准 此章带大家回顾下本地事物的一些内容。标题 2 事物: 有一组操作构成的可靠,独立的工作单元----百度百科 事物的四大特性: A:原子性(Atomicity)事务是数据库的逻辑工作单位#xff0c;事务中包括的诸操作要么全做#x… 2019独角兽企业重金招聘Python工程师标准 此章带大家回顾下本地事物的一些内容。标题 2 事物: 有一组操作构成的可靠,独立的工作单元----百度百科 事物的四大特性: A:原子性(Atomicity)事务是数据库的逻辑工作单位事务中包括的诸操作要么全做要么全不做。
B:一致性(Consistency)事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
C:隔离性(Isolation)一个事务的执行不能被其他事务干扰。
D:持续性/永久性(Durability)一个事务一旦提交它对数据库中数据的改变就应该是永久性的。 以上介绍完事务的四大特性(简称ACID)现在重点来说明下事务的隔离性当多个线程都开启事务操作数据库中的数据时数据库系统要能进行隔离操作以保证各个线程获取数据的准确性在介绍数据库提供的各种隔离级别之前我们先看看如果不考虑事务的隔离性会发生的几种问题 不可重复读 不可重复读的重点是修改: 同样的条件, 你读取过的数据, 再次读取出来发现值不一样了 例子 在事务1中Mary 读取了自己的工资为1000,操作并没有完成 con1 getConnection();
select salary from employee empId Mary; 在事务2中这时财务人员修改了Mary的工资为2000,并提交了事务. con2 getConnection();
update employee set salary 2000;
con2.commit(); 在事务1中Mary 再次读取自己的工资时工资变为了2000 //con1
select salary from employee empId Mary; 在一个事务中前后两次读取的结果并不致导致了不可重复读。 幻读 幻读的重点在于新增或者删除 同样的条件, 第1次和第2次读出来的记录数不一样 例子 目前工资为1000的员工有10人。 事务1,读取所有工资为1000的员工。 con1 getConnection();
Select * from employee where salary 1000; 共读取10条记录 这时另一个事务向employee表插入了一条员工记录工资也为1000 con2 getConnection();
Insert into employee(empId,salary) values(Lili,1000);
con2.commit(); 事务1再次读取所有工资为1000的员工 //con1
select * from employee where salary 1000; 共读取到了11条记录这就产生了幻像读。 事物的隔离级别: 现在来看看MySQL数据库为我们提供的四种隔离级别 ① Serializable (串行化)可避免脏读、不可重复读、幻读的发生。 ② Repeatable read (可重复读)可避免脏读、不可重复读的发生。 ③ Read committed (读已提交)可避免脏读的发生。 ④ Read uncommitted (读未提交)最低级别任何情况都无法保证。 以上四种隔离级别最高的是Serializable级别最低的是Read uncommitted级别当然级别越高执行效率就越低。像Serializable这样的级别就是以锁表的方式(类似于Java多线程中的锁)使得其他的线程只能在锁外等待所以平时选用何种隔离级别应该根据实际情况。在MySQL数据库中默认的隔离级别为Repeatable read (可重复读)。 在MySQL数据库中支持上面四种隔离级别默认的为Repeatable read (可重复读)而在Oracle数据库中只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别其中默认的为Read committed级别。 在MySQL数据库中查看当前事务的隔离级别 select tx_isolation; 在MySQL数据库中设置事务的隔离 级别 set [glogal | session] transaction isolation level 隔离级别名称;set tx_isolation’隔离级别名称;’ 本地事物的局限性 如何修复事物的局限性解决微服务问题 1单数据源局限性思考 既然一个事物只能操作一个数据源那么我们能否新建多个事物分别操作多个数据源最后通过一个统一的”事物管理器”进行统一管理以及提交呢? 2单进程局限性思考 既然一个事物只能对一个线程进行管理那么我们能否新建多个事物分别操作多个线程最后通过一个统一的”事物管理器”进行统一管理以及提交呢? 3高并发下效率低局限性思考 既然事物执行效率低那么能否把事物的执行丢到一个异步线程里面执行这样主线程就不会受事物的影响了。 那就带着我们自己思考的解决方案正式进入分布式方案的讲解吧。 /** * ————————如果觉得本博文还行别忘了推荐一下哦谢谢 * 作者写程序的奥特曼 * 欢迎转载请保留此段声明。 * 出处https://my.oschina.net/u/2286631/blog/1504647 */ 转载于:https://my.oschina.net/u/2286631/blog/1504647