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;

輸出

以下是上述查詢的輸出 -

姓名 出生日期 分行 餘額
阿米特 1970-01-08 海德拉巴 2554
蘇米特 1990-11-02 維沙卡帕特南 5589
蘇達 1980-11-06 維賈亞瓦達 5587

在下面的 MySQL 查詢集中,我們啟動一個事務並將 1500/- 從阿米特的賬戶轉到蘇達的賬戶。

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;

輸出

上述程式產生以下輸出 -

姓名 出生日期 分行 餘額
阿米特 1970-01-08 海德拉巴 1054
蘇米特 1990-11-02 維沙卡帕特南 5589
蘇達 1980-11-06 維賈亞瓦達 7087
廣告