MySQL - COMMIT 事务语句
通常,事务是按逻辑顺序完成的工作单元或序列,可以是用户手动完成的,也可以是由某种数据库程序自动完成的。
数据库事务是指将一个或多个更改作为单个操作传播到数据库的过程。
例如,将一定金额从一个账户转移到另一个账户视为一个事务。这基本上包含三个步骤
- 读取待转账的金额。
- 验证转账方账户中是否有该金额。
- 从转账方账户贷记款项。
- 从收款方账户扣款。
要完成转账,上述所有操作都必须成功完成。为确保这一点,您可以使用事务并将所有这些步骤视为单个操作。
MYSQL 使用 SET autocommit、START TRANSACTION、COMMIT 和 ROLLBACK 语句支持事务。
COMMIT 语句
COMMIT 语句保存自上次提交或 START TRANSACTION 语句以来当前事务中所做的所有修改。
语法
以下是 MySQL COMMIT 语句的语法 -
COMMIT
示例
MySQL 会保存每个语句执行后所做的更改。要自动保存更改,请设置自动提交选项,如下所示 -
SET autocommit=0;
假设我们已经使用 CREATE 语句在 MySQL 数据库中创建了一个名为 Players 的表,如下所示 -
CREATE TABLE Players( ID INT, First_Name VARCHAR(255), Last_Name VARCHAR(255), Date_Of_Birth date, Place_Of_Birth VARCHAR(255), Country VARCHAR(255), PRIMARY KEY (ID) );
现在,我们将使用 INSERT 语句在 Players 表中插入 7 条记录 -
Insert into Players values (1, 'Shikhar', 'Dhawan', DATE('1981-12-05'), 'Delhi', 'India'), (2, 'Jonathan', 'Trott', DATE('1981-04-22'), 'CapeTown', 'SouthAfrica'), (3, 'Kumara', 'Sangakkara', DATE('1977-10-27'), 'Matale', 'Srilanka'), (4, 'Virat', 'Kohli', DATE('1988-11-05'), 'Delhi', 'India'), (5, 'Rohit', 'Sharma', DATE('1987-04-30'), 'Nagpur', 'India'), (6, 'Ravindra', 'Jadeja', DATE('1988-12-06'), 'Nagpur', 'India'), (7, 'James', 'Anderson', DATE('1982-06-30'), 'Burnley', 'England');
以下查询保存更改 -
COMMIT;
现在,让我们从表中删除最后一条记录 -
Delete from Players where id = 7;
您可以使用 SELECT 语句检索上述创建表的内容,如下所示 -
SELECT * FROM Players;
输出
上述查询产生以下输出 -
ID | First_Name | Last_Name | Date_Of_Birth | Place_Of_Birth | Country |
---|---|---|---|---|---|
1 | Shikhar | Dhawan | 1981-12-05 | Delhi | India |
2 | Jonathan | Trott | 1981-04-22 | CapeTown | SouthAfrica |
3 | Kumara | Sangakkara | 1977-10-27 | Matale | Srilanka |
4 | Virat | Kohli | 1988-11-05 | Delhi | India |
5 | Rohit | Sharma | 1987-04-30 | Nagpur | India |
6 | Ravindra | Jadeja | 1988-12-06 | Nagpur | India |
以下语句将还原上次提交后的更改。
ROLLBACK;
如果我们回滚事务,则上次提交后所做的所有更改都将被还原。由于我们在设置提交后删除了第 7 条记录,因此在回滚时,此删除操作将被还原。
SELECT * FROM Players;
输出
以下是上述查询的输出 -
ID | First_Name | Last_Name | Date_Of_Birth | Place_Of_Birth | Country |
---|---|---|---|---|---|
1 | Shikhar | Dhawan | 1981-12-05 | Delhi | India |
2 | Jonathan | Trott | 1981-04-22 | CapeTown | SouthAfrica |
3 | Kumara | Sangakkara | 1977-10-27 | Matale | Srilanka |
4 | Virat | Kohli | 1988-11-05 | Delhi | India |
5 | Rohit | Sharma | 1987-04-30 | Nagpur | India |
6 | Ravindra | Jadeja | 1988-12-06 | Nagpur | India |
7 | James | Anderson | 1982-06-30 | Burnley | England |