Mysql事务怎么理解?

事务是啥?

事务是数据库管理系统中用于管理一组数据库操作的机制,它保证了这组操作要么全部成功执行,要么全部失败回滚,从而维护了数据库的一致性和完整性。

事务的特性通常由 ACID 缩写表示:

  1. 原子性(Atomicity):事务是一个原子操作单元,要么全部执行成功,要么全部失败回滚。如果在事务执行过程中发生了错误或故障,所有已经执行的操作都会被撤销,数据库状态会回到事务开始前的状态,不会留下中间状态。

  2. 一致性(Consistency):事务执行前后,数据库的完整性约束必须保持一致。事务所做的修改必须是合法的,不会破坏数据库的完整性和约束条件。

  3. 隔离性(Isolation):事务的执行是相互隔离的,一个事务的中间状态对其他事务是不可见的。并发执行的多个事务之间不会相互干扰,每个事务都认为它在独立的环境中执行。

  4. 持久性(Durability):一旦事务成功提交,其所做的修改将会永久保存在数据库中,即使在系统故障的情况下也不会丢失。

事务的使用场景包括多个数据库操作需要保持一致性,例如银行转账操作,需要同时更新两个账户的余额,并且要保证如果其中一个操作失败,另一个操作也会被回滚,以保持数据的一致性。

在数据库中,通常使用以下语句来管理事务:

  • BEGINSTART TRANSACTION:标记事务的开始。
  • COMMIT:提交事务,将所有的操作应用到数据库,并使它们永久保存。
  • ROLLBACK:回滚事务,撤销所有未提交的操作,将数据库状态还原到事务开始之前的状态。

例如,对于 MySQL 数据库,可以使用以下方式创建和管理事务:

-- 开始事务
START TRANSACTION;

-- 执行一系列数据库操作
UPDATE account SET balance = balance - 100 WHERE account_id = 1;
UPDATE account SET balance = balance + 100 WHERE account_id = 2;

-- 提交事务
COMMIT;

如果中间出现了错误或者不满足某个条件,可以使用 ROLLBACK 回滚事务,撤销所有的操作。

通过使用事务,可以保证数据库的一致性,防止数据损坏或不一致,并提供数据操作的可靠性和稳定性。

 回滚事务

回滚命令用于撤销当前事务中的所有操作,并将数据库状态恢复到事务开始之前的状态。如果在事务执行过程中发生了错误或者需要撤销事务的部分操作,可以使用回滚来实现数据的回退。

注意:要使用回滚,事务必须先被启动,即使用 BEGINSTART TRANSACTION 命令开启事务,然后在事务中执行各种数据库操作。当需要回滚事务时,才能使用 ROLLBACK 命令进行回滚。

-- 开启事务
START TRANSACTION;

-- 执行一系列数据库操作
UPDATE account SET balance = balance - 100 WHERE account_id = 1;
UPDATE account SET balance = balance + 100 WHERE account_id = 2;

-- 检查是否满足某个条件
IF (condition) THEN
    -- 如果条件满足,提交事务
    COMMIT;
ELSE
    -- 如果条件不满足,回滚事务
    ROLLBACK;
END IF;

在上述示例中,我们首先使用 START TRANSACTION 命令开启了一个事务。然后执行了一系列数据库操作,包括更新账户余额。接着,我们使用 IF 语句来检查是否满足某个条件。如果条件满足,则使用 COMMIT 提交事务,否则使用 ROLLBACK 回滚事务。

需要注意的是,事务在被提交或回滚之前,它的操作对数据库是不可见的。只有在执行 COMMITROLLBACK 后,事务对数据库的修改才会生效。

 

事务是会有一个专门的名字吗?如果没有,当我要回滚到某个地方时,如何识别?

事务本身是一个通用的概念,是数据库管理系统中用于管理一组数据库操作的机制,它没有固定的专门名字。事务通常由 BEGINSTART TRANSACTION 开始,由 COMMIT 提交或 ROLLBACK 回滚。

在实际应用中,开发人员可能会根据业务需求给事务起一个特定的名字,以便更好地理解和管理。例如,在某些数据库管理系统中,可以使用保存点(Savepoint)来标记一个事务中的特定阶段,以便在回滚时只回滚到指定的保存点,而不是整个事务。这个保存点可以被认为是事务的一个部分,并可以为其命名。

例如,在 MySQL 数据库中,可以使用 SAVEPOINT 命令创建一个保存点,并在需要的地方进行回滚:

-- 开始事务
START TRANSACTION;

-- 执行一系列数据库操作
UPDATE table1 SET column1 = value1 WHERE condition1;
UPDATE table2 SET column2 = value2 WHERE condition2;

-- 创建保存点
SAVEPOINT my_savepoint;

-- 执行更多数据库操作
UPDATE table3 SET column3 = value3 WHERE condition3;
UPDATE table4 SET column4 = value4 WHERE condition4;

-- 检查条件是否满足
IF (condition) THEN
    -- 条件满足,提交事务
    COMMIT;
ELSE
    -- 条件不满足,回滚到保存点
    ROLLBACK TO SAVEPOINT my_savepoint;
END IF;

在上述示例中,我们使用 SAVEPOINT 命令创建了一个名为 my_savepoint 的保存点,在事务的执行过程中,如果条件不满足,我们可以使用 ROLLBACK TO SAVEPOINT 回滚到这个保存点,从而只回滚到该保存点之后执行的操作。

请注意,保存点是可选的,并不是所有的数据库管理系统都支持保存点。事务本身就是一个较为抽象的概念,具体的实现和命名可能因数据库管理系统而异。

posted @ 2023-08-03 16:41  双木玥  阅读(59)  评论(0编辑  收藏  举报