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

事务的定义:

当一组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操作。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值