博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql的事务 及隔离级别
阅读量:6573 次
发布时间:2019-06-24

本文共 977 字,大约阅读时间需要 3 分钟。

1.事务的基本概念

  数据库事务指 一系列数据库操作作为一个逻辑单元,要么全部执行,要么全部不执行。

 

2.事务的四大特性

  原子性(automic):对于一系列的数据库操作,要么全部执行,要么全部不执行。

  一致性(consistency):事务完成后所影响的数据在逻辑上保持一致。

  什么是一致性?数据的一致性可以从多个方面来说,比如银行转账两账户的金额总和。再比如mysql集群上对一个服务器的数据进行了修改其他服务器的数据同是否步一致。强一致性:一条数据的修改,能被后续的访问都看到。 弱一致性:后续部分或全部访问不到修改数据。 最终一致性:经过一段时间后,所有后续访问都能看到修改后的数据。

  隔离性(isolation):对于并发事务,一个事务不能使用另一个事务的中间状态的数据。

  持久性(duration):事务完成后,对数据的影响是永久性的。

 

3.并发情况下数据库访问出现的几种问题

  3.1.脏读

  脏读指你在事务中修改了一条记录,我读取了修改后的值,然后进行逻辑处理,最后你又将事务回滚导致修改作废,而我使用这条作废的记录值,最终导致了脏读。

  解决办法: 一个事务完成后修改的数据才能被其他事务可见。

 

  3.2.不可重复读

  不可重复读指我先读取了一条记录,然后你修改了这条记录,然后我再读取的时候,发现两次读取的数据不一致。

  解决办法: 对自己读取的数据加行锁。

 

  3.3.幻读

  幻读指我读取了一个表的所有行数,然后你新增或删除了一行数据,然后我再查询表行数的时候发现两次不一致。

  解决办法:对整个表加表锁。

 

4.  事务的隔离级别

  read uncommit, 事务没有提交,数据就被读取,不能解决脏读,不可重复读和幻读。

  read commit, 事务提交后,修改的数据才能被其他事务可见,可解决脏读,不可解决不可重复读和幻读。

  repeatable read,可重复读,读事务操作的数据加行锁,一次事务中读到的数据不会被其他事务更改,可解决脏读,不可重复读,不能解决幻读。

  serializable, 串行化,对整个表加锁,可解决脏读,不可重复读,幻读。

  

 

 

  

转载于:https://www.cnblogs.com/f-r-a-n-k/p/9482862.html

你可能感兴趣的文章
POJ - 2777——Count Color(懒标记线段树二进制)
查看>>
zepto 事件分析4(事件队列)
查看>>
Silverlight/WPF中DependencyProperty使用陷阱一枚
查看>>
转:一个Sqrt函数引发的血案
查看>>
国际音标遗漏
查看>>
c++ 编译时函数匹配和运行时类型识别
查看>>
Velocity - 单例还是非单例
查看>>
mysql 安装和修改编码(utf8mb4)
查看>>
Ethernet、VLAN、QinQ
查看>>
Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)
查看>>
SQL中的ROW_NUMBER()和while循环对每一行执行操作
查看>>
Android Graphviz 安装
查看>>
DevExpreess汉化使用方法及汉化包
查看>>
31. Next Permutation (java 字典序生成下一个排列)
查看>>
同时装有py2 和3,运行scrapy如何区分
查看>>
Android开发之动态加载,运行未安装apk
查看>>
uva-10245-分治
查看>>
前台html基础标签7.6
查看>>
javascript arguments(转)
查看>>
Google maps API开发(一)(转)
查看>>