前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 事务

MySQL 事务

作者头像
孟斯特
发布2024-03-25 16:06:45
690
发布2024-03-25 16:06:45
举报
文章被收录于专栏:code人生code人生

1. 简介

事务(Transaction)是数据库管理系统(DBMS)中的一个重要概念,它是一系列操作的集合,这些操作要么全部执行成功,要么全部失败。事务是数据库的基本操作单元,它是数据库系统中的一个逻辑单位,用于保证数据的一致性、隔离性和持久性。

在MySQL中,事务具有以下四个特性,通常称为ACID特性:

1.原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部失败。原子性保证了事务的不可分割性,即事务中的操作是一个整体,不能被分割或拆分。2.一致性(Consistency):事务执行前后,数据库的状态应该保持一致。一致性保证了事务的执行不会破坏数据库的完整性约束和业务规则。3.隔离性(Isolation):事务之间应该相互隔离,一个事务不应该受到其他事务的干扰。隔离性保证了事务的执行不会受到其他并发事务的影响,从而确保数据的正确性。4.持久性(Durability):事务一旦提交,其对数据库的所有修改都应该是永久性的。持久性保证了事务的执行结果能够被持久化存储,即使在系统故障的情况下,事务的执行结果也不会丢失。

在MySQL中,可以使用以下命令来控制事务:

?START TRANSACTION; or BEGIN;:开始一个新的事务。?COMMIT;:提交当前事务,使事务中的所有修改生效。?ROLLBACK;:回滚当前事务,撤销事务中的所有修改。

2. 事务并发

事务并发是指多个事务同时执行,这可能会导致以下问题:

1.丢失更新:当两个或多个事务同时对相同的数据进行更新时,最后提交的事务可能会覆盖之前提交的事务所做的修改,导致之前的更新丢失。1.解决办法:乐观锁+版本号2.脏读:当一个事务读取了另一个事物尚未提交的数据时,如果该事务最终回滚,则读取到的数据就是无效的,这种现象被称为脏读。3.不可重复读:当一个事务在读取同一行数据时,由于其它事务的更新操作导致多次读取到的数据不一致,即同一行数据在前后两次读取之间发生了变化。4.幻读:当一个事务在读取某个范围内的数据时,另一个事务在该范围内插入了新的数据或删除了已有数据,导致第一个事务在后续读取时发现多出或缺少了数据行,出现幻读现象。

为了解决事务并发带来的问题,数据库系统提供了事务隔离级别(Transaction Isolation Level)的概念。事务隔离级别定义了一个事务与其他事务之间的隔离程度,以防止并发事务带来的问题。MySQL支持以下四种事务隔离级别:

1.未提交读(Read Uncommitted):允许一个事务读取另一个事务未提交的数据。这可能导致脏读、不可重复读、幻读。2.已提交读(Read Committed):只允许一个事务读取另一个事务已经提交的数据。这可以防止脏读问题,当仍然坑出现不可重复读和幻读问题。3.可重复读(Repeatable Read):在同一个事务中多次读取同一数据时,保证读取到的数据时一致的。这可以防止脏读和不重复读问题,但仍会出现幻读问题。4.串行化(Serializable):要求所有的事务串行执行,即一个事务在执行时,其它事务必须等待。这可以防止脏读、不可重复读和幻读问题,但会降低并发性能。

隔离级别

脏读

不可重复读

幻读

未提交读(Read Uncommitted)

已提交读(Read Committed)

可重复读(Repeatable Read)

串行化(Serializable)

3. 查看、设置MySQL事务隔离级别

代码语言:javascript
复制
-- 查看事务隔离级别
-- 使用系统变量查询
SELECT @@transaction_isolation;

-- 5.7.20之前
SHOW VARIABLES LIKE '_isolation';

-- 5.7.20之后版本
SHOW VARIABLES LIKE 'transaction_isolation';

-- 设置事务隔离级别
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)[1]进行许可,使用时请注明出处。 Author: mengbin[2] blog: mengbin[3] Github: mengbin92[4] cnblogs: 恋水无意[5] 腾讯云开发者社区:孟斯特[6]

References

[1] 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh [2] mengbin: mengbin1992@outlook.com [3] mengbin: https://mengbin.top [4] mengbin92: https://mengbin92.github.io/ [5] 恋水无意: https://www.cnblogs.com/lianshuiwuyi/ [6] 孟斯特: /developer/user/6649301

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-20,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 孟斯特 微信公众号,前往查看

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

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 简介
  • 2. 事务并发
  • 3. 查看、设置MySQL事务隔离级别
    • References
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com