MySQL的事务(transactions)详解及基本使用 您所在的位置:网站首页 mysql处理事务的一般步骤包括 MySQL的事务(transactions)详解及基本使用

MySQL的事务(transactions)详解及基本使用

2024-07-13 12:55| 来源: 网络整理| 查看: 265

MySQL的事务(transactions)详解及基本使用

在MySQL中,默认的存储引擎是InnoDB,InnoDB支持事务,而MyISAM不支持事务。

1. 什么是事务

MySQL事务是用于管理和维护数据一致性的一组SQL操作。事务确保了数据库中的一系列操作要么全部执行成功,要么全部回滚,从而保证数据的完整性。 事务分为显式事务和隐式事务 显式事务:代码中明确使用事务管理语句来控制事务的开始和结束。 隐式事务:指在单个SQL语句中自动处理的事务。在MySQL中,某些SQL语句(如 INSERT, UPDATE, DELETE 等)如果在未显式开启事务的情况下执行,则MySQL会自动将每个语句当作一个单独的事务来处理。这种方式无需显式地使用事务管理语句,数据库会自动在每个SQL语句执行后立即提交事务。

2. 事务的特性 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。 3. 并发事务带来的问题 脏读:一个事务读取到另一个事务还没有提交的数据。不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称为不可重复读。幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现了这行数据已经存在,好像出现了“幻影”。 4. 事务的隔离级别

MySQL提供了4种事务隔离级别

读已提交(READ UNCOMMITTED):最低的隔离级别,事务可以读取其他未提交事务的数据,可能会出现脏读(dirty read)。读已提交(READ COMMITTED):事务只能读取其他已提交的事务的数据,避免脏读,但可能会出现不可重复读(non-repeatable read)。可重复读(REPEATABLE READ):默认的隔离级别,事务再开始时只能看到已提交的数据,并且在整个事务中看到的数据时一致的,避免了不可重复读,但可能会出现幻读(phantom read)。可串行化(SERIALIZABLE):最高的隔离级别,通过锁定读取的所有数据行,避免了幻读,但是会导致性能下降。

在这里插入图片描述

5. MySQL中的事务的使用方法

显式事务的步骤:

关闭事务自动提交 -- 关闭自动提交(适用于显式事务) SET autocommit = 0; -- 开启自动提交(适用于隐式事务) SET autocommit = 1; 开始事务:使用START TRANSACTION或BEGIN。执行SQL操作:执行一个或多个SQL语句。提交事务:如果所有操作成功,则使用COMMIT语句提交事务。回滚事务:如果遇到错误或需要撤销操作,则使用ROLLBACK语句回滚事务。 5.1 开启事务(显式事务) START TRANSACTION;

BEGIN; 5.2 提交事务

提交事务使用COMMIT语句,所有的修改将被保存到数据库中

COMMIT; 5.3 回滚事务

回滚事务使用ROLLBACK语句,所有的修改将被撤销。

ROLLBACK; 5.4 设置事务的隔离级别 SET TRANSACTION ISOLATION LEVEL 隔离级别;

例如,设置为读已提交:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有