MySQL事务

本文详细解释了事务在数据库中的基本概念,包括事务的原子性、一致性、隔离性和持久性。通过银行转账示例说明事务操作,并介绍了MySQL中如何控制事务提交和回滚。此外,讨论了并发事务可能遇到的问题以及四种常见的事务隔离级别及其优缺点。
摘要由CSDN通过智能技术生成

·事务简介

事务是一组操作的集合,他是不可分割的一个工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么全部成功,要么全部失败。

每条sql操作都是一个事务,mysql中sql语句自动提交。

举例:

如果是银行转账行为,需要三步进行操作:查询A余额,A余额减1000,B余额加1000。如果第三步出现异常,那么需要进行事务回滚,将A余额减少的1000恢复,不然就会有1000凭空消失。

所以,事务要求全部成功,或者全部失败。

注意:

由于mysql中都是自动提交,所以需要手动开启事务,手动提交事务和手动回滚事务。

·事务操作

例子:

银行转账:A给B转1000;

正常情况:

select * from account where name = 'A';

update account set money = money - 1000 where name = 'A';

update account set money = money + 1000 where name = 'B';

异常情况:

select * from account where name = 'A';

update account set money = money - 1000 where name = 'A';

23432123ecvdsw

update account set money = money + 1000 where name = 'B';

这里A会减少1000,B余额不会变。

方式一:

修改事务提交方式,自动改为手动,然后出错手动回滚,没错手动commit。

查看/设置事务提交方式

SELECT @@autocommit; -- 查看事务的提交方式,1是自动提交,0是手动提交

SET @@autocommit = 0; -- 把事务设置为手动提交

提交事务:

COMMIT;

回滚事务:

ROLLBACK;

展示:

SELECT @@autocommit;

SET @@autocommit = 0;

select * from account where name = 'A';

update account set money = money - 1000 where name = 'A';

23432123ecvdsw

update account set money = money + 1000 where name = 'B';

这里A会减少1000,B余额不会变。

commit; -- 提交,修改的是一张表的事务提交方式,每次执行操作后都要执行commit

rollback; -- 回滚,出错了执行这个手动回滚。

方式二:

开启事务:

START TRANSACTION 或 BEGIN;

提交事务:

commit;

回滚事务:

rollback;

展示:

start transaction;

select * from account where name = 'A';

update account set money = money - 1000 where name = 'A';

23432123ecvdsw

update account set money = money + 1000 where name = 'B';

这里A会减少1000,B余额不会变。

commit; -- 提交,修改的是一张表的事务提交方式,每次执行操作后都要执行commit

rollback; -- 回滚,出错了执行这个手动回滚。

·事务四大特性

原子性:事务具备原子性,说明事务是数据库中最小的工作单位,事务的原子性确保数据库操作过程中的所有步骤的全部成功或全部失败;

一致性:指事务对于数据进行修改操作,要求数据修改前和修改后的状态保持一致。例如:银行转账业务的事务无论是否成功,转账者和收款人的总额应该保持不变;

隔离性:是指一个事务的执行不能被其他事务干扰,一个事务的操作和使用的数据,对并发中的其他事务是隔离的

持久性:是指一个事务一旦被提交,他对数据库的改变是永久性的

·并发事务问题

可能引发的问题:
 

问题

描述

脏读

一个事务督导另一个事务还没提交的数据

不可重复读

一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

幻读

一个事务按照条件查询数据时,没有对应的数据行,但在插入数据时,又发现这行数据已经存在,好像出现了幻影。

·事务隔离级别

事务隔离级别是数据库管理系统中的一个重要概念,用于定义事务在并发执行时的隔离程度。以下是四种常见的事务隔离级别及其特点:

  1. Read Uncommitted(读未提交):
    • 允许读取到其他事务尚未提交的数据。
    • 可能导致脏读(Dirty Read),即读取到其他事务未提交的数据,这些数据可能在未来被回滚,导致读取的数据无效。
    • 可能出现不可重复读(Non-repeatable Read)和幻读(Phantom Read)的问题。
  1. Read Committed(读已提交):
    • 只允许读取到已经提交的数据。
    • 避免了脏读的问题,但可能出现不可重复读的问题,因为其他事务可能在两次读取之间修改了数据。
    • 可能出现幻读的问题,因为其他事务可能在两次读取之间插入了新数据。
  1. Repeatable Read(可重复读)(mysql的默认隔离级别):
    • 默认隔离级别,用于防止脏读问题。
    • 使用锁机制来防止不可重复读和幻读的问题。
    • 并发能力较差,可能导致较高的锁代价和系统性能开销。
  1. Serializable(可串行化):
    • 最高隔离级别,实现串行化读取数据。
    • 通过在读取的数据上加锁,防止数据冲突,从而避免脏读、不可重复读和幻读的问题。
    • 但会导致大量超时和锁竞争问题,影响系统性能。

不同的事务隔离级别提供了不同程度的隔离,以满足不同应用场景对于一致性和性能的需求。在选择事务隔离级别时,需要在数据一致性和系统性能之间进行权衡。

查看和设置事务的隔离级别:

查看:

SELECT @@TRANSACTION_ISOLATION;

事务隔离级别:

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL { READUNCOMMTTED | READ COMMITTED │ REPEATABLE READ | SERALZABLE}

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL 事务是指一组数据库操作,这些操作要么全部执行,要么全部不执行,其目的是保证在并发环境下,数据的一致性和完整性。MySQL 事务具有 ACID 性质,即原子性、一致性、隔离性和持久性。 MySQL 中使用事务需要使用 BEGIN、COMMIT 和 ROLLBACK 语句,其中 BEGIN 表示开启一个事务,COMMIT 表示提交事务,ROLLBACK 表示回滚事务事务的基本语法如下: ``` BEGIN; -- 执行一组数据库操作 COMMIT; -- 提交事务 -- 或者 ROLLBACK; -- 回滚事务 ``` 在 MySQL 中,事务的隔离级别分为四个等级,分别是 Read Uncommitted、Read Committed、Repeatable Read 和 Serializable。隔离级别越高,数据的一致性和完整性越高,但同时也会影响数据库的性能。 MySQL 事务的 ACID 性质有以下含义: 1. 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部失败回滚,不会只执行其中的一部分操作。 2. 一致性(Consistency):事务执行前后,数据库中的数据必须保持一致性状态,即满足数据库的约束条件和完整性规则。 3. 隔离性(Isolation):事务之间应该是相互隔离的,一个事务的执行不应该被其他事务干扰,保证事务之间的数据相互独立。 4. 持久性(Durability):事务提交后,对数据库的修改应该是永久性的,即使出现系统故障或电源故障,也不应该对数据产生影响。 总之,MySQL 事务是一组数据库操作,具有 ACID 性质,可以通过 BEGIN、COMMIT 和 ROLLBACK 语句来实现,隔离级别越高,数据的一致性和完整性越高,但同时也会影响数据库的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿究院-Cu-Sn合金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值