MySQL 中的事务是什么意思??解释一下它的属性?

事务的定义

事务是一组可以提交或者撤销的操作的集合,可以把它看做是一个不可分割的操作集合。

在一个事务中,所有的操作要么全部提交成功,要么全部都会被撤销,因此,这可以保证数据的一致性及完整性。MySQL 提供了非常完善的事务机制支持,这对于数据库用户来说是非常重要的。

事务的四个属性

事务有四个重要的属性,这些属性被称为 ACID

原子性(Atomicity)

事务被看做是不可分割的工作单元,其中每个操作要么全部完成,要么全部失败。也就是说,事务所有的操作都要么全部执行,要么全部都不执行,不会有中间状态。

一致性(Consistency)

事务在执行之前和之后,都处于一致的状态。在执行事务之前,数据库中的状态符合一定的约束,需要保证事务的执行和提交后数据库的状态也符合约束。因为事务不仅是对数据的修改,还可能涉及到其他系统资源的修改。

隔离性(Isolation)

事务的隔离性指的是事务之间的相互隔离。在一个事务还没有提交修改时,其他事务不能访问它所修改的数据,而且不能修改它锁定的数据。同时,其它事务所做的修改在本事务中是无法看到的。该属性保证了修改的隔离性。

持久性(Durability)

持久性指的是一旦事务提交成功,它所做的修改就会被永久保存到数据库中,并且不能因为系统故障而被回滚。如果事务的修改已经成功提交,那么数据就是永久性的。

MySQL 中的事务处理

InnoDB的事务处理

在 MySQL 中,不是所有表的类型都支持事务,使用事务的表必须使用类型为 InnoDB 的表。 InnoDB 是 MySQL 的一个事务安全的存储引擎。

使用 InnoDB 存储引擎,必须满足以下条件:

必须首先用 CREATE TABLE 创建一个 InnoDB 表,InnoDB 表是具有事务处理的一种表类型。

必须开启事务,使用 START TRANSACTION 语句。

事务结束后,必须使用 COMMIT 或 ROLLBACK 语句,对事务做出处理。

InnoDB的锁机制

InnoDB 的锁是自动添加和释放的,无需用户干预。 锁级别有以下几个:

共享锁(Shared Lock):多个事务可以同时读取,但是不能并发读取。

排他锁(Exclusive Lock):事务在执行期间,其他事务不能读取数据,同时也不能对数据加排他锁。

事务的操作

开启事务

开启事务需要使用 START TRANSACTION 语句。

START TRANSACTION;

提交事务

事务的提交需要使用 COMMIT 语句,执行这个命令后,系统就会对数据库进行更改并且释放锁定的表。

COMMIT;

回滚事务

当某个事务处理失败或者出现系统错误时,就可以使用 ROLLBACK 并撤销对数据库的任何更改。

ROLLBACK;

回滚到某个指定的点

可能需要回滚到一个指定的时间点,或者是执行了某个操作。回滚到指定的点需要使用 ROLLBACK TO 语句。

ROLLBACK TO savepoint_1;

这里的 savepoint_1 是我们设定的一个保存点。

保存点

在事务中,如果需要回滚到中间的某个状态,可以使用保存点进行记录。创建保存点的语句如下:

SAVEPOINT savepoint_1;

这里的 savepoint_1 就是我们创建的保存点名字,可以根据需求来更改。

总结

MySQL 提供了非常完善的事务机制支持,它不仅可以将多个 SQL 语句看做一个整体进行处理,还能确保 SQL 语句的原子性、一致性、隔离性和持久性,使用事务可以保证数据的完整性和可靠性。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签