MySQL - START TRANSACTION 语句
通常,事务是按逻辑顺序完成的工作单元或序列,可以由用户手动执行,也可以由某种数据库程序自动执行。
数据库事务是指将一个或多个更改作为单个操作传播到数据库。
例如,将一定金额从一个账户转移到另一个账户视为一个事务。这基本上包含三个步骤:
- 读取要转账的金额。
- 验证转账方账户中是否有该金额。
- 从转账方账户贷记款项。
- 从收款方账户扣款。
要完成转账,上述所有操作都必须成功完成。为确保这一点,您可以使用事务并将所有这些步骤视为单个操作。
MYSQL 使用 SET autocommit、START TRANSACTION、COMMIT 和 ROLLBACK 语句支持事务。
START TRANSACTION 语句
MySQL 的 START TRANSACTION 语句用于启动新事务。
语法
以下是 START TRANSACTION 语句的语法 -
START TRANSACTION [transaction_characteristic [, transaction_characteristic]...]
示例
假设我们创建了一个名为 emp 的表,并在其中填充了 3 条记录,如下所示 -
CREATE TABLE accounts( Name VARCHAR(255), DOB DATE, Brach VARCHAR(255), balance INT );
现在,让我们在 accounts 表中插入一些记录 -
INSERT INTO accounts VALUES ('Amit', DATE('1970-01-08'), 'Hyderabad', 2554), ('Sumith', DATE('1990-11-02'), 'Vishakhapatnam', 5589), ('Sudha', DATE('1980-11-06'), 'Vijayawada', 5587);
您可以使用 SELECT 语句验证表的内容,如下所示:-
SELECT * FROM accounts;
输出
以下是上述查询的输出:-
Name | DOB | Branch | balance |
---|---|---|---|
Amit | 1970-01-08 | Hyderabad | 2554 |
Sumith | 1990-11-02 | Vishakhapatnam | 5589 |
Sudha | 1980-11-06 | Vijayawada | 5587 |
在下面的一组 MySQL 查询中,我们启动一个事务,将 1500/- 从 Amit 的账户转移到 Sudha。
START TRANSACTION; UPDATE accounts SET balance= balance-1500 WHERE Name='Amit'; UPDATE accounts SET balance= balance+1500 WHERE Name='sudha'; COMMIT;
如果再次验证 accounts 表的内容,您可以观察到更新后的余额。
SELECT * FROM accounts;
输出
上述程序产生以下输出 -
Name | DOB | Branch | balance |
---|---|---|---|
Amit | 1970-01-08 | Hyderabad | 1054 |
Sumith | 1990-11-02 | Vishakhapatnam | 5589 |
Sudha | 1980-11-06 | Vijayawada | 7087 |