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.