MySQL - COMMIT 语句



一般来说,事务是按逻辑顺序完成的工作单元或序列,无论是用户手动完成的,还是数据库程序自动完成的。

数据库事务是对数据库进行一次性操作的一个或多个更改的传播。

例如,如果您将一定金额从一个帐户转到另一个帐户视为单个事务。这基本上包含三个步骤

  • 读取要转账的金额。
  • 验证发件人帐户中是否有足够的金额。
  • 从发件人帐户中贷记资金。
  • 从收款人帐户中借记资金。

为了成功转账,所有上述操作都应该成功完成。为了确保这一点,您可以使用事务并将所有这些步骤视为单个操作。

MYSQL 使用 SET autocommit、START TRANSACTION、COMMIT 和 ROLLBACK 语句提供对事务的支持。

COMMIT 语句

COMMIT 语句保存自上次提交或 START TRANSACTION 语句以来当前事务中所做的所有修改。

语法

以下是 MySQL COMMIT 语句的语法:

COMMIT

示例

MySQL 在执行每个语句后保存所做的更改。要自动保存更改,请设置如下所示的 autocommit 选项:

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 德里 印度
2 Jonathan Trott 1981-04-22 开普敦 南非
3 Kumara Sangakkara 1977-10-27 马塔勒 斯里兰卡
4 Virat Kohli 1988-11-05 德里 印度
5 Rohit Sharma 1987-04-30 那格浦尔 印度
6 Ravindra Jadeja 1988-12-06 那格浦尔 印度

以下语句在上次提交后撤消更改。

ROLLBACK;

如果我们回滚事务,则上次提交后的所有更改都将被撤消。由于我们在设置提交后删除了第 7 条记录,因此在回滚时此删除操作将被撤消。

SELECT * FROM Players;

输出

以下是上述查询的输出:

ID First_Name Last_Name Date_Of_Birth Place_Of_Birth Country
1 Shikhar Dhawan 1981-12-05 德里 印度
2 Jonathan Trott 1981-04-22 开普敦 南非
3 Kumara Sangakkara 1977-10-27 马塔勒 斯里兰卡
4 Virat Kohli 1988-11-05 德里 印度
5 Rohit Sharma 1987-04-30 那格浦尔 印度
6 Ravindra Jadeja 1988-12-06 那格浦尔 印度
7 James Anderson 1982-06-30 伯恩利 英格兰
广告
© . All rights reserved.