mysql事务

个人理解:
事务:是为了保证数据库数据的真实性和完整性,让一起执行的多个sql对数据库的操作要么同时成功,要么同时失败而存在的.
事务有4大性质:ACID
Atomicity [ˌætəˈmɪsəti]
原子性:事务执行的不可分割的最小单元,就是事务要么同时成功写入磁盘,要么失败数据回滚至初始状态
Consistency [kənˈsɪstənsi]
一致性:数据库执行前后,数据库的完整性不被破坏,指数据处于一种语义上的有意义且正确的状态(比如1+1=2,最终的结果是2,在1+1期间,其他事务执行了别的操作不会改变结果2)
Isolation[ˌaɪsəˈleɪʃn]
隔离性:事务与事务之间的操作是相互隔离的,在多个事务同时进行时,事务的隔离性可以防止多个事务交叉对数据处理导致数据不一致的问题;
durability [ˌdjʊərəˈbɪlɪti]
持久性:事务开始和完成前后,对数据库的操作是持久的。即使是系统故障也不会丢失.

事务的并发导致的问题和解决办法

1、丢失更新:最后的更新覆盖了其他事务之前的更新,而事务之间并不知道,发生更新丢失。更新丢失,可以完全避免,应用对访问的数据加锁即可。
2、脏读:一个事务看到了另一个事务未提交的更新数据;当事务读取尚未提交的数据时,就会发生这种情况。

例如事务A正在访问数据,并且对数据进行了修改,更改了一行数据,这种修改还没有提交到数据库中,而事务B在事务A提交更新之前读取了已更新的行,然后使用了这个数据。
如果事务A回滚该更新,则事务B使用的这个数据由于还没有提交,就会被认为是不曾存在的数据,即为脏数据,根据脏数据所做的操作可能是不正确的。
事务B读取到事务A已经修改但尚未提交的数据。

3、 不可重复读:在同一事务中,两次读取同一数据,得到内容不同,也就是有其他事务更改了这些数据;

指在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数据是不一样的情况,因此称为不可重复读。(数据已存在的情况下对数据的update/delete)

4、幻读:一个事务在执行过程中读取到了另一个事务已提交的插入数据;即在第一个事务开始时读取到一批数据,但此后另一个事务又插入了新数据并提交,此时第一个事务又读取这批数据但发现多了一条,即好像发生幻觉一样(数据不存在的情况下,对表进行insert)。
在这里插入图片描述

下图是不同的隔离级别带来的问题关系图
在这里插入图片描述
事务的实现其实是靠锁来实现的,数据库默认的隔离级别:可重复读(Repeatable Read)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值