简述MySQL事务

事物的四大特性(ACID)

原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么全部失败;
一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
隔离性(Isolation): 并发访问数据库时,一个事务的成功或者失败对于其他的事务是没有影响,两个事务应该相互独立。
持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

什么是脏读?幻读?不可重复读?

脏读(Drity Read) : 当事务读取还未提交的数据时,就会发生这种事件。事务1已更新一份数据,事务2在此时读取了同一份数据,由于某些原因,前一个回滚(RollBack)了操作,则后一个事务所读取的数据就会是不正确的。
不可重复读(Non-repeatable read) : 同一事务中,前后多次读到的数据不一样。例如甲乙同时读取一行数据,然后甲修改或删除该行并提交修改操作,当乙试图重新读取该行时,它就会得到不同的数据值。
不可重复读和脏读的区别是,脏读是读取前一事务未提交的脏数据,不可重复读是重新读取了前一事务已提交的数据。
幻读(Phantom Read): 和脏读类似,是针对于插入操作过程中的读取问题,在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。

隔离级别

数据库规范规定了4种隔离级别,分别用于描述两个事务并发的所有情况。

  • READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更。
    a) 存在:3个问题(脏读、不可重复读、虚读)。
    b) 解决:0个问题

  • READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据。
    a) 存在:2个问题(不可重复读、虚读)。
    b) 解决:1个问题(脏读)

  • REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改。
    a) 存在:1个问题(虚读)。
    b) 解决:2个问题(脏读、不可重复读)

  • SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰。
    a) 存在:0个问题。
    b) 解决:3个问题(脏读、不可重复读、虚读)
    安全和性能对比
    安全性: SERIALIZABLE > REPEATABLE-READ > READ-COMMITTED > READ-UNCOMMITTED
    性能 (并发性): SERIALIZABLE < REPEATABLE-READ < READ-COMMITTED < READ-UNCOMMITTED

(如果有不对的地方还请多多指出)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值