在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ SQL 事務(wù)
SQL AND 和 OR 連接運(yùn)算符
SQL 刪除數(shù)據(jù)庫(kù)
SQL 使用序列
SQL CONCAT 函數(shù)
SQL 使用視圖
SQL SELECT 語(yǔ)句
SQL 別名
SQL MAX 函數(shù)
SQL 創(chuàng)建表
SQL NULL 值
SQL 數(shù)據(jù)類型
SQL RAND 函數(shù)
SQL 臨時(shí)表
SQL INSERT 語(yǔ)句
SQL ALTER TABLE 命令
SQL 關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)
SQL SUM 函數(shù)
SQL 子查詢
SQL UPDATE 語(yǔ)句
SQL 表達(dá)式
SQL 操作符
SQL ORDER BY 子句
SQL WHERE 子句
SQL 對(duì)結(jié)果進(jìn)行排序
SQL 注入
SQL AVG 函數(shù)
SQL 選擇數(shù)據(jù)庫(kù),USE 語(yǔ)句
SQL 克隆數(shù)據(jù)表
SQL COUNT 函數(shù)
SQL 語(yǔ)法
SQL DELETE 語(yǔ)句
SQL 約束
SQL 刪除表
SQL TOP、LIMIT 和 ROWNUM 子句
SQL 日期函數(shù)
SQL TRUNCATE TABLE 命令
SQL DISTINCT 關(guān)鍵字
SQL 處理重復(fù)數(shù)據(jù)
SQL 使用連接
SQL 索引
SQL 事務(wù)
SQL GROUP BY 子句
SQL HAVING 子句
SQL MIN 函數(shù)
SQL 概覽
SQL SQRT 函數(shù)
SQL LIKE 子句
SQL 通配符
SQL UNION 子句
SQL 數(shù)據(jù)庫(kù)
SQL 創(chuàng)建數(shù)據(jù)庫(kù)

SQL 事務(wù)

事務(wù)是在數(shù)據(jù)庫(kù)上按照一定的邏輯順序執(zhí)行的任務(wù)序列,既可以由用戶手動(dòng)執(zhí)行,也可以由某種數(shù)據(jù)庫(kù)程序自動(dòng)執(zhí)行。

事務(wù)實(shí)際上就是對(duì)數(shù)據(jù)庫(kù)的一個(gè)或者多個(gè)更改。當(dāng)你在某張表上創(chuàng)建更新或者刪除記錄的時(shí),你就已經(jīng)在使用事務(wù)了。控制事務(wù)以保證數(shù)據(jù)完整性,并對(duì)數(shù)據(jù)庫(kù)錯(cuò)誤做出處理,對(duì)數(shù)據(jù)庫(kù)來(lái)說(shuō)非常重要。

實(shí)踐中,通常會(huì)將很多 SQL 查詢組合在一起,并將其作為某個(gè)事務(wù)一部分來(lái)執(zhí)行。

事務(wù)的屬性:

事務(wù)具有以下四個(gè)標(biāo)準(zhǔn)屬性,通常用縮略詞 ACID 來(lái)表示:

  • 原子性:保證任務(wù)中的所有操作都執(zhí)行完畢;否則,事務(wù)會(huì)在出現(xiàn)錯(cuò)誤時(shí)終止,并回滾之前所有操作到原始狀態(tài)。
  • 一致性:如果事務(wù)成功執(zhí)行,則數(shù)據(jù)庫(kù)的狀態(tài)得到了進(jìn)行了正確的轉(zhuǎn)變。
  • 隔離性:保證不同的事務(wù)相互獨(dú)立、透明地執(zhí)行。
  • 持久性:即使出現(xiàn)系統(tǒng)故障,之前成功執(zhí)行的事務(wù)的結(jié)果也會(huì)持久存在。

事務(wù)控制:

有四個(gè)命令用于控制事務(wù):

  • COMMIT:提交更改;
  • ROLLBACK:回滾更改;
  • SAVEPOINT:在事務(wù)內(nèi)部創(chuàng)建一系列可以 ROLLBACK 的還原點(diǎn);
  • SET TRANSACTION:命名事務(wù);

COMMIT 命令:

COMMIT 命令用于保存事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的更改。

COMMIT 命令會(huì)將自上次 COMMIT 命令或者 ROLLBACK 命令執(zhí)行以來(lái)所有的事務(wù)都保存到數(shù)據(jù)庫(kù)中。

COMMIT 命令的語(yǔ)法如下所示:

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ù)庫(kù)中。

SQL> DELETE FROM CUSTOMERS
     WHERE AGE = 25;
SQL> COMMIT;

上述語(yǔ)句將會(huì)從表中刪除兩行記錄,再執(zhí)行 SELECT 語(yǔ)句將會(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 命令:

ROLLBACK 命令用于撤銷尚未保存到數(shù)據(jù)庫(kù)中的事務(wù)。

ROLLBACK 命令只能撤銷自上次 COMMIT 命令或者 ROLLBACK 命令執(zhí)行以來(lái)的事務(wù)。

ROLLBACK 命令的語(yǔ)法如下所示:

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ù)庫(kù)所做的更改。

SQL> DELETE FROM CUSTOMERS
     WHERE AGE = 25;
SQL> ROLLBACK;

結(jié)果是刪除操作并不會(huì)對(duì)數(shù)據(jù)庫(kù)產(chǎn)生影響?,F(xiàn)在,執(zhí)行 SELECT 語(yǔ)句將會(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 命令:

SAVEPOINT 是事務(wù)中的一個(gè)狀態(tài)點(diǎn),使得我們可以將事務(wù)回滾至特定的點(diǎn),而不是將整個(gè)事務(wù)都撤銷。

SAVEPOINT 命令的記錄如下所示:

SAVEPOINT SAVEPOINT_NAME;

該命令只能在事務(wù)語(yǔ)句之間創(chuàng)建保存點(diǎn)(SAVEPOINT)。ROLLBACK 命令可以用于撤銷一系列的事務(wù)。

回滾至某一保存點(diǎn)的語(yǔ)法如下所示:

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ù)庫(kù)回滾至 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 命令:

RELEASE SAVEPOINT 命令用于刪除先前創(chuàng)建的保存點(diǎn)。

RELEASE SAVEPOINT 的語(yǔ)法如下所示:

RELEASE SAVEPOINT SAVEPOINT_NAME;

保存點(diǎn)一旦被釋放,你就不能夠再用 ROLLBACK 命令來(lái)撤銷該保存點(diǎn)之后的事務(wù)了。

SET TRANSACTION 命令:

SET TRANSACTION 命令可以用來(lái)初始化數(shù)據(jù)庫(kù)事務(wù),指定隨后的事務(wù)的各種特征。

例如,你可以將某個(gè)事務(wù)指定為只讀或者讀寫。

SET TRANSACTION 命令的語(yǔ)法如下所示:

SET TRANSACTION [ READ WRITE | READ ONLY ];