前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【MySQL】有效管理MySQL事务:最佳基础与技巧

【MySQL】有效管理MySQL事务:最佳基础与技巧

作者头像
洁洁
发布2025-02-28 08:52:44
发布2025-02-28 08:52:44
1160
举报
文章被收录于专栏:小洁叫你mysql小洁叫你mysql

事务

  一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元,只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库;如果有部分事务处理失败,那么事务就要回退到最初的状态,因此,事务要么全部执行成功,要么全部失败。

  所以记住事务的几个基本概念,如下:

1、事务是一组SQL语句的执行,要么全部成功,要么全部失败,不能出现部分成功,部分失败的结果。保证事务执行的原子操作。 2、事务的所有SQL语句全部执行成功,才能提交(commit)事务,把结果写回磁盘上。 3、事务执行过程中,有的SQL出现错误,那么事务必须要回滚(rollback)到最初的状态。

ACID特性

每一个事务必须满足下面的4个特性:

事务的原子性(Atomic):

事务是一个不可分割的整体,事务必须具有原子特性,及当数据修改时,要么全执行,要么全不执行, 即不允许事务部分的完成。

事务的一致性(Consistency):

一个事务执行之前和执行之后,数据库数据必须保持一致性状态。数据库的一致性状态必须由用户来负责,由并发控制机制实现。就拿网上购物来说,你只有让商品出库,又让商品进入顾客的购物车才能构成一个完整的事务。

事务的隔离性(Isolation):

当两个或者多个事务并发执行时,为了保证数据的安全性,将一个事物内部的操作与其它事务的操作隔离起来,不被其它正在执行的事务所看到,使得并发执行的各个事务之间不能互相影响。

事务的持久性(Durability):

事务完成(commit)以后,DBMS保证它对数据库中的数据的修改是永久性的,即使数据库因为故障出错,也应该能够恢复数据!

  • ACD是由MySQL的redo log重做日志机制和undo log回滚日志机制确保
  • I是由MySQL的事务·的锁机制来保证实现的

事务并发存在的问题

  事务处理不经隔离,并发执行事务时通常会发生以下的问题:

  脏读(Dirty Read):一个事务读取了另一个事务未提交的数据。例如当事务A和事务B并发执行时,当事务A更新后,事务B查询读取到A尚未提交的数据,此时事务A回滚,则事务B读到的数据就是无效的脏 数据。(事务B读取了事务A尚未提交的数据)

  不可重复读(NonRepeatable Read):一个事务的操作导致另一个事务前后两次读取到不同的数据。例如当事务A和事务B并发执行时,当事务B查询读取数据后,事务A更新操作更改事务B查询到的数据,此时事务B再次去读该数据,发现前后两次读的数据不一样。(事务B读取了事务A已提交的数据)

  虚读(Phantom Read)幻读:一个事务的操作导致另一个事务前后两次查询的结果数据量不同。例如当事务A和事务B并发执行时,当事务B查询读取数据后,事务A新增或者删除了一条满足事务B查询条件 的记录,此时事务B再去查询,发现查询到前一次不存在的记录,或者前一次查询的一些记录不见了。 (事务B读取了事务A新增加的数据或者读不到事务A删除的数据)

事务的隔离级别

  MySQL支持的四种隔离级别是: 1、TRANSACTION_READ_UNCOMMITTED。未提交读。说明在提交前一个事务可以看到另一个事务的变化。这样读脏数据,不可重复读和虚读都是被允许的。

2、TRANSACTION_READ_COMMITTED。已提交读。说明读取未提交的数据是不允许的。这个级别仍然允许不可重复读和虚读产生。

3、TRANSACTION_REPEATABLE_READ。可重复读。说明事务保证能够再次读取相同的数据而不会失败,但虚读仍然会出现。(可以防止insert/delete操作,但是对于update无效)

4、TRANSACTION_SERIALIZABLE。串行化。是最高的事务级别,它防止读脏数据,不可重复读和虚读。

备注

  事务隔离级别越高,为避免冲突所花费的性能也就越多。在“可重复读”级别,实际上可以解决部分的虚读问题,但是不能防止update更新产生的虚读问题,要禁止虚读产生,还是需要设置串行化隔离级别。

  已提交读:解决了脏读问题,每一次select都会产生一次新的数据快照,产生数据快照前提是数据已经被事务正确commit提交过了。

  可重复读:第一次select才会产生数据快照,而且只产生一次。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 事务
  • ACID特性
    • 事务的原子性(Atomic):
    • 事务的一致性(Consistency):
    • 事务的隔离性(Isolation):
    • 事务的持久性(Durability):
  • 事务并发存在的问题
  • 事务的隔离级别
  • 备注
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档