栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

MySQL的事务是什么?什么是脏读?幻读?不可重复读?

Java 更新时间:发布时间: 百科书网 趣学号

事务的定义:

当一组sql语句放在同一批次中去执行,如果其中有一个sql语句出错,那么该批次内的所有sql都将被取消执行。

事务有四个特性:

1.原子性:工作单元中所有操作要么都成功,要么都不成功,不会出现部分成功的情况

2.一致性:工作完成其结果应该与预期一致,例如账户A向账户B转账的事务,如果该事务执行成功必须要保证账户A 转出多少,账户B转入相同的数,如果事务失败,那么转账失败。

3.隔离性:还可以被称为并发控制,可串行化,锁等。事务中所有操作的数据要隔离起来,以防止其他用户访问这些数据而带来的不一致情况。

4.持久性:事务一旦提交,所做的修改就会永久保存到数据库中,即使数据库发生故障也不会有任何影响。(故障不包括硬盘损坏等)

事务隔离级别脏读不可重复读幻读
读未提交
不可重复读
可重复读
串行化

事务的注意事项:

1.存储过程的执行begin会开启一个事务,end结束会隐式提交一次

2.不要在事务的中途进行提交操作,不仅会破坏事务的原子性,还会使事务结束

3.由于DDL或DCL操作会创建新的事务,这会导致前面的操作隐式提交,从而破坏事务的原子性,尽量不要在过程中使用DDL或DCL语句

事务的操作:

1.关闭自动提交:set autocommit=0;

2.开启事务:start transcation;

3.一组sql语句

4.提交事务:commit

5.回滚事务:rollback

6.事务结束:end transaction

7.开启原来自动提交:set autocommit=1;

脏读:

首先脏读又被称为无效数据的读出,是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,所以另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能不正确。总结就是事务A读到了事务B未提交的数据。

注:脏读一般是针对update操作。

幻读:

是指当事务不是独立执行时发生的一种现象,当第一个事务对表中的数据进行了修改,这种修改涉及到表中的全部数据行,此时第二个事务也在修改这个表中的数据,这种修改是向表中插入一行新数据,那么就会发生操作第一个事务的用户发现还有没有修改的数据行,跟出现了幻觉一样。

注:幻读一般是针对insert或delete操作同样的条件,第一次和第二次读出来的数据不一样。

不可重复读:

是指在一个事务内,多次读同一个数据。在一个事务还没有结束的时候,另外一个事务也访问该同一数据,那么在第一个事务中的两次读数据之间,由于第二个事务的修改,第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据不一样,所以称为不可重复读。

注:不可重复读一般是针对update操作。

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1071681.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号