W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
事務(wù)是在數(shù)據(jù)庫上按照一定的邏輯順序執(zhí)行的任務(wù)序列,既可以由用戶手動(dòng)執(zhí)行,也可以由某種數(shù)據(jù)庫程序自動(dòng)執(zhí)行。
事務(wù)實(shí)際上就是對(duì)數(shù)據(jù)庫的一個(gè)或者多個(gè)更改。當(dāng)你在某張表上創(chuàng)建更新或者刪除記錄的時(shí),你就已經(jīng)在使用事務(wù)了。控制事務(wù)以保證數(shù)據(jù)完整性,并對(duì)數(shù)據(jù)庫錯(cuò)誤做出處理,對(duì)數(shù)據(jù)庫來說非常重要。
實(shí)踐中,通常會(huì)將很多 SQL 查詢組合在一起,并將其作為某個(gè)事務(wù)一部分來執(zhí)行。
事務(wù)具有以下四個(gè)標(biāo)準(zhǔn)屬性,通常用縮略詞 ACID 來表示:
有四個(gè)命令用于控制事務(wù):
COMMIT 命令用于保存事務(wù)對(duì)數(shù)據(jù)庫所做的更改。
COMMIT 命令會(huì)將自上次 COMMIT 命令或者 ROLLBACK 命令執(zhí)行以來所有的事務(wù)都保存到數(shù)據(jù)庫中。
COMMIT 命令的語法如下所示:
COMMIT;
考慮 CUSTOMERS 表,表中的記錄如下所示:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
下面的示例將會(huì)刪除表中 age=25 的記錄,然后將更改提交(COMMIT)到數(shù)據(jù)庫中。
SQL> DELETE FROM CUSTOMERS
WHERE AGE = 25;
SQL> COMMIT;
上述語句將會(huì)從表中刪除兩行記錄,再執(zhí)行 SELECT 語句將會(huì)得到如下結(jié)果:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
ROLLBACK 命令用于撤銷尚未保存到數(shù)據(jù)庫中的事務(wù)。
ROLLBACK 命令只能撤銷自上次 COMMIT 命令或者 ROLLBACK 命令執(zhí)行以來的事務(wù)。
ROLLBACK 命令的語法如下所示:
ROLLBACK;
考慮 CUSTOMERS 表,表中的記錄如下所示:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
下面的示例將會(huì)從表中刪除所有 age=25 的記錄,然后回滾(ROLLBACK)對(duì)數(shù)據(jù)庫所做的更改。
SQL> DELETE FROM CUSTOMERS
WHERE AGE = 25;
SQL> ROLLBACK;
結(jié)果是刪除操作并不會(huì)對(duì)數(shù)據(jù)庫產(chǎn)生影響?,F(xiàn)在,執(zhí)行 SELECT 語句將會(huì)得到如下結(jié)果:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
SAVEPOINT 是事務(wù)中的一個(gè)狀態(tài)點(diǎn),使得我們可以將事務(wù)回滾至特定的點(diǎn),而不是將整個(gè)事務(wù)都撤銷。
SAVEPOINT 命令的記錄如下所示:
SAVEPOINT SAVEPOINT_NAME;
該命令只能在事務(wù)語句之間創(chuàng)建保存點(diǎn)(SAVEPOINT)。ROLLBACK 命令可以用于撤銷一系列的事務(wù)。
回滾至某一保存點(diǎn)的語法如下所示:
ROLLBACK TO SAVEPOINT_NAME;
下面的示例中,你計(jì)劃從 CUSTOMERS 表中刪除三條不同的記錄,并在每次刪除之前創(chuàng)建一個(gè)保存點(diǎn)(SAVEPOINT),從而使得你可以在任何任何時(shí)候回滾到任意的保存點(diǎn),以恢復(fù)數(shù)據(jù)至其原始狀態(tài)。
考慮 CUSTOMERS 表,表中的記錄如下所示:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
操作序列如下所示:
SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.
現(xiàn)在,三次刪除操作已經(jīng)生效了,如果此時(shí)你改變主意決定回滾至名字為 SP2 的保存點(diǎn),由于 SP2 于第一次刪除操作之后創(chuàng)建,所以后兩次刪除操作將會(huì)被撤銷。
SQL> ROLLBACK TO SP2;
Rollback complete.
注意,由于你將數(shù)據(jù)庫回滾至 SP2,所以只有第一次刪除真正起效了:
SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.
RELEASE SAVEPOINT 命令用于刪除先前創(chuàng)建的保存點(diǎn)。
RELEASE SAVEPOINT 的語法如下所示:
RELEASE SAVEPOINT SAVEPOINT_NAME;
保存點(diǎn)一旦被釋放,你就不能夠再用 ROLLBACK 命令來撤銷該保存點(diǎn)之后的事務(wù)了。
SET TRANSACTION 命令可以用來初始化數(shù)據(jù)庫事務(wù),指定隨后的事務(wù)的各種特征。
例如,你可以將某個(gè)事務(wù)指定為只讀或者讀寫。
SET TRANSACTION 命令的語法如下所示:
SET TRANSACTION [ READ WRITE | READ ONLY ];
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: