MySQL - 回滾語句



一般來說,事務是按邏輯順序完成的工作單元或序列,無論是由使用者手動執行還是由某種資料庫程式自動執行。

資料庫事務是指將一個或多個更改作為資料庫上的單個操作傳播。MYSQL 使用 SET autocommit、START TRANSACTION、COMMIT 和 ROLLBACK 語句提供對事務的支援。

COMMIT 語句儲存當前事務中所做的所有修改。

回滾語句

ROLLBACK 操作撤消當前事務所做的所有更改,即如果呼叫此語句,則所有修改都會回滾到上次提交或 START TRANSACTION 語句。

語法

以下是 MySQL **ROLLBACK** 語句的語法:

ROLLBACK

示例

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 表中插入 3 條記錄:

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');

以下查詢儲存更改:

COMMIT;

現在,讓我們使用 INSERT 語句新增更多記錄:

Insert into Players values
(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');

您可以使用 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
7 James Anderson 1982-06-30 Burnley England

以下語句會回滾上次提交後的更改。

ROLLBACK;

如果我們回滾一個事務,則上次提交後所做的所有更改都將被回滾。由於我們在提交後插入了最後 4 條記錄,因此它們將在回滾時被回滾。

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
廣告