让我们看一下最简单形式的语法:
START TRANSACTION; {sql statement 1} {sql statement 2} ... ... COMMIT;
MySQL 事务包含指示事务开始和结束的命令以及允许 MySQL 引擎执行必要的提交或回滚操作的其他选项。
START TRANSACTION:它指的是事务的开始/发起。此时内部自动提交已关闭,即除非明确提交,否则不会提交语句。
MySQL 语句:事务中可以有多个相关语句,这些语句将全部执行或不执行。
COMMIT:这是指事务的最终语句,它指示 MySQL 引擎将所做的更改写入。
让我们看一个例子。
我们还将在中间阶段通过创建 MySQL 的新会话并查询受尚未提交的事务影响的表来验证 MySQL 事务。
场景:假设有一个银行账户表,我们在其中进行银行内部转账,即持有账户 A 的人试图将 100 美元转移到账户 B。
场景的 CREATE TABLE 语句:
CREATE TABLE bankaccounts(accountno varchar(20) PRIMARY KEY NOT NULL, funds decimal(8,2));
添加名为 ACC1 和 ACC2 的 2 个帐户的信息,每个帐户的初始资金余额为 1000 美元。
INSERT INTO bankaccounts VALUES("ACC1", 1000); INSERT INTO bankaccounts VALUES("ACC2", 1000);
现在,让我们看看下面的交易语句:
START TRANSACTION or BEGIN; --statement1 UPDATE bankaccounts SET funds=funds-100 WHERE accountno='ACC1'; --statement2 UPDATE bankaccounts SET funds=funds+100 WHERE accountno='ACC2'; --statement3 COMMIT; --statement4
请注意,我们已将上述事务中的语句从 statement1 命名为 statement4。
交易报表流程如下:
START TRANSACTION:此行指示 MySQL 开始或启动事务。
需要执行的语句。
COMMIT 代表事务的终止。
为了查看事务的中间状态是否已提交,我们将在事务中执行借记语句,并创建一个新的 MySQL 事务来查询帐户表。
让我们在上面的事务中执行 statement1 和 statement2 并打开一个新的 MySQL 会话(使用工作台等 UI 客户端或通过命令行客户端)并运行 SELECT 语句以获取我们表中资金的详细信息。
从银行账户中选择 *;
输出如下: