事务是什么?什么是脏读、幻读和不可重复读?"/>
Mysql的事务是什么?什么是脏读、幻读和不可重复读?
一、事务
将一组sql语句放在同一批次内去执行,如果一个sql语句出错,则该批次内的所有sql都将被取消执行。
二、事务的隔离级别
1、原子性(Atomicity)
事务包含的所有操作要么全部成功,要么全部失败,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
2、一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
3、隔离性(Isolation)
当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
4、持久性(Durability)
一个事务一旦被提交,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
三、实现事务的方法和步骤
1.-- 关闭自动提交
set autocommit =0;
2.--开启事务
start transaction ;
--执行一组sql语句
update bank set bmoney=bmoney-1000 where bname='马智';
update bank set bmoney=bmoney+1000 where bname='刘鑫喵';
3.--结束事务
--1.提交
commit; --提交事务后 保存到磁盘 持久性 不会回流
--2.全部回滚
rollback;
4.--开启自动提交
set autocommit=1;
四、事务的隔离级别
Read Uncommited,读未提交:
一个事务可以读取另一个未提交事务的数据;并发操作会导致脏读
Read Commited,读操作:
即一个事务要等到另一个事务提交后才能读取数据;解决脏读问题;并发操作会导致不可重复读
Repeatable Read,重复读:
即开始读取数据(事务开启)时,不再允许修改操作;解决不可重复读问题;并发操作会导致幻读(对应insert操作)
Serializable,可串行化:
最高的事务隔离级别,该级别下,事务串行化顺序执行;避免脏读、不可重复读与幻读;但是该级别效率低下,比较消耗数据库性能(因为锁的存在),一般不用。
更多推荐
Mysql的事务是什么?什么是脏读、幻读和不可重复读?
发布评论