MySQL事务

1.什么是事务? 

将一组操作封装成一个执行单元,要么一块执行成功,要么一块失败,不会出现执行一半的情况。

数据库引擎:InnoDB才支持事务,MyISAM不支持事务。


2.事务怎么用?
2.1开启事务 start transaction,mysql8之后使用begin

2.2提交事务 commit

2.3回滚事务 rollback

3.事务的四大特性(ACID)

(1)原子性(不可分割性 A):⼀个事务中的所有操作,要么全部执⾏成功,要么全部执⾏失败。

(2)一致性(C):⼀个事务在执⾏前后数据必须保持⼀种合法的状态,事务总是从⼀个⼀致状态到另⼀个⼀致状态。

(3)隔离性(独立性 I):多个事务并发访问时,事务之间是相互隔离的,⼀个事务不应该被其他事务⼲扰,多个并发事务之间要 相互隔离。

(4)持久性(D):事务执⾏完成之后,它所做的所有修改都是永久的(不会丢失)。

4.事务隔离级别:

(1)读未提交read uncommitted:可以读取到其他事务中未提交的数据。⽽未提交的数据如果发⽣回滚,那么读取到的数据就是幽灵数据,也称为脏数据,这个情况称为脏读

(2)读已提交read committed:读取到已经提交事务的数据,解决了脏读问题。但不可重复读,所以在不同时间的相同 SQL 查询中,可能会得到不同的结果,这种现象叫做不可重复读

(3)可重复读repeatable read:是 MySQL 的默认事务隔离级别,它能确保同⼀事务多次查询的结果⼀致。但也会有新的问题,⽐如此级别的事务正在执⾏时,另⼀个事务成功的插⼊了某条数据,但因为它每次查询的结果都是⼀样的,所以会导致查询不到这条数据,⾃⼰重复插⼊时⼜失败(因为唯⼀约束的原因)。明明在事务中查询不到这条信息,但⾃⼰就是插⼊不进去,这就叫幻读(Phantom Read)

(4)序列化SERIALIZABLE:事务最⾼隔离级别,它会强制事务排序,使之不会发⽣冲突,从⽽解决了脏读、不可重复读和幻读问题,但因为执⾏效率低,所以真正使⽤的场景并不多。

不可重复读与幻读区别:
        不可重复读描述的侧重点不同,不可重复读描述的是修改操作,比如t1时间读取了一行数据,t2时间的时候读取到了这个数据,内容已经发生改变了,这个叫不可重复读;

        而幻读描述的是幻象行的问题,它指在t1时间使用一个sql得到了n行数据,而t2时间使用相同的sql却得到了n+1条数据,那么多出来的一行就叫幻象行,这个操作就叫幻读。

不可重复读描述侧重点是修改操作,它指两次读取了同一行数据,得到了不同结果;

幻读描述侧重点是添加(或删除)操作,它指第一次读取到了N行数据,而第二次使用相同sql

事务隔离级别

脏读

不可重复读

幻读

读未提交

读已提交

×

可重复读(默认)

×

×

序列化

×

×

×

(1)查询事务的隔离级别

select @@global.tx_isolation,@@tx_isolation;


(2)设置当前客户端的事务隔离级别

set session transaction isolation level 事务隔离级别;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值