第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

SQL 事務(wù)1

1. 定義

慕課解釋?zhuān)?事務(wù)(Transaction)是數(shù)據(jù)庫(kù)中的一個(gè)核心概念,指的是將數(shù)據(jù)庫(kù)的一組操作作為一個(gè)整體,要么全部執(zhí)行,要么都不執(zhí)行。

2. 前言

本小節(jié),我們將一起學(xué)習(xí)數(shù)據(jù)庫(kù)中的一個(gè)重點(diǎn)內(nèi)容——事務(wù)。

事務(wù)并非 SQL 中獨(dú)有,在數(shù)據(jù)庫(kù)、編程語(yǔ)言、各類(lèi)框架中均有出現(xiàn),而且無(wú)一例外都是重點(diǎn)。事務(wù)是一個(gè)較為復(fù)雜的概念,本小節(jié)會(huì)有一定的理論闡述,當(dāng)然也會(huì)有一些小例子來(lái)幫助你理解。

事務(wù)的內(nèi)容比較多,本小節(jié)會(huì)介紹事務(wù)的概念和基本使用,下一小節(jié)我們?cè)賮?lái)探討事務(wù)的四種隔離級(jí)別。

本小節(jié)測(cè)試數(shù)據(jù)如下,請(qǐng)先在數(shù)據(jù)庫(kù)中執(zhí)行,本小節(jié)的所有操作若無(wú)特殊說(shuō)明默認(rèn)在 MySQL 中執(zhí)行。

DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
  id int PRIMARY KEY,
  username varchar(20),
  age int
);
INSERT INTO imooc_user(id,username,age)
VALUES (1,'peter',18),(2,'pedro',24),(3,'jerry',22),(4,'mike',18),(5,'tom',20);

3. 理論

3.1 特性

事務(wù)具有四大特性,即ACID,它們分別是:

  • 原子性(Atomicity):每個(gè)事務(wù)都是一個(gè)整體,不可再拆分,事務(wù)中的 SQL 操作要么全部執(zhí)行成功,要么全部失敗。
  • 一致性(Consistency):事務(wù)執(zhí)行前后數(shù)據(jù)庫(kù)的狀態(tài)必須保持一致。如 A 轉(zhuǎn)賬給 B,轉(zhuǎn)賬后金額的總數(shù)是不變的。
  • 隔離性(Isolation):事務(wù)與事務(wù)之間互不影響,彼此隔離。
  • 持久性(Durability):事務(wù)一旦提交成功,對(duì)數(shù)據(jù)庫(kù)的更改就是永久的,即使出現(xiàn)了其它情況,數(shù)據(jù)改變?nèi)匀淮嬖凇?/li>

事務(wù)的四大特性是事務(wù)最本質(zhì)的特點(diǎn),在這四個(gè)特性中,原子性是基礎(chǔ),隔離性是手段,一致性是約束條件,而持久性是我們的目的。

3.2 語(yǔ)法

事務(wù)是一組操作的集合,因此沒(méi)有固定的語(yǔ)法格式,事務(wù)常見(jiàn)的控制語(yǔ)句如下:

  1. START TRANSACTIONBEGIN,用來(lái)顯式地開(kāi)始一個(gè)事務(wù)。
  2. COMMIT,提交事務(wù)。
  3. SAVEPOINT,創(chuàng)建保存點(diǎn),一個(gè)事務(wù)可以有多個(gè)保存點(diǎn),事務(wù)可以根據(jù)保存點(diǎn)進(jìn)行回滾。
  4. ROLLBACKROLLBACK TO [SAVEPOINT],回滾事務(wù),默認(rèn)回滾所有更改,如果加上保存點(diǎn),則回滾到保存點(diǎn)。
  5. RELEASE SAVEPOINT,釋放保存點(diǎn),即刪除某個(gè)保存點(diǎn),保存點(diǎn)被刪除后,不可回滾。
  6. SET TRANSACTION,設(shè)置事務(wù)的隔離級(jí)別,在下小節(jié)將會(huì)詳細(xì)介紹。

提示: 并不是每個(gè)數(shù)據(jù)庫(kù)引擎都支持事務(wù),如 MySQL 的 MyISAM 引擎就不支持事務(wù)。

4. 實(shí)踐

事務(wù)使用的一般流程為:通過(guò) BEGIN 開(kāi)始一個(gè)事務(wù),進(jìn)行一組數(shù)據(jù)操作,如果操作成功,通過(guò) COMMIT 提交事務(wù),否則通過(guò) ROLLBACK 回滾。

4.1 例1 提交事務(wù)

請(qǐng)書(shū)寫(xiě) SQL 語(yǔ)句,通過(guò)一個(gè)事務(wù)向imooc_user表插入一個(gè)用戶,用戶名為lucy,年齡為21,并提交事務(wù)。

分析:

先顯示通過(guò) BEGIN 開(kāi)始一個(gè)事務(wù),然后使用 INSERT 語(yǔ)句插入用戶,再通過(guò) COMMIT 提交事務(wù)即可。

語(yǔ)句:

整理可得語(yǔ)句如下:

BEGIN;
INSERT INTO imooc_user(id,username,age) VALUES (6,'lucy',21);
COMMIT;

執(zhí)行成功后,結(jié)果如下:

+----+----------+-----+
| id | username | age |
+----+----------+-----+
| 6  | lucy     | 21  |
+----+----------+-----+

4.2 例2 回滾事務(wù)

事務(wù)提交和事務(wù)回滾是一對(duì)互斥操作,事務(wù)回滾后,事務(wù)之前的操作都將失效

請(qǐng)書(shū)寫(xiě) SQL 語(yǔ)句,通過(guò)一個(gè)事務(wù)向imooc_user表插入一個(gè)用戶,用戶名為dell,年齡為21,并回滾事務(wù)。

分析:

先顯示通過(guò) BEGIN 開(kāi)始一個(gè)事務(wù),然后使用 INSERT 語(yǔ)句插入用戶,再通過(guò) ROLLBACK 回滾事務(wù)即可。

語(yǔ)句:

整理可得語(yǔ)句如下:

BEGIN;
INSERT INTO imooc_user(id,username,age) VALUES (7,'dell',21);
ROLLBACK;

執(zhí)行成功后,dell 并未被插入到 imooc_user 表中,可見(jiàn) ROLLBACK 的確撤銷(xiāo)了之前的數(shù)據(jù)操作。

4.3 例3 回滾且提交事務(wù)

前面談到,事務(wù)的回滾是可以指定保存點(diǎn)的,因此我們可以只回滾部分操作,提交其它操作。

如下:

BEGIN;
INSERT INTO imooc_user(id,username,age) VALUES (8,'stark', 20);
SAVEPOINT savepoint1;
INSERT INTO imooc_user(id,username,age) VALUES (9,'alice', 20);
ROLLBACK TO savepoint1;
COMMIT;

上面的 SQL 語(yǔ)句的大致執(zhí)行流程如下:

  1. BEGIN 顯示的開(kāi)啟了一個(gè)事務(wù)。
  2. 向 imooc_user 表中插入了用戶 stark ,并且通過(guò) SAVEPOINT 新建了保存點(diǎn) savepoint1。
  3. 又向 imooc_user 中插入了另外一個(gè)用戶 alice。
  4. 通過(guò) ROLLBACK 將事務(wù)回滾到了 savepoint1,即第2個(gè)插入語(yǔ)句將會(huì)失效。
  5. 提交事務(wù)。

執(zhí)行成功后,數(shù)據(jù)如下:

+----+----------+-----+
| id | username | age |
+----+----------+-----+
| 8  | stark    | 20  |
+----+----------+-----+

從結(jié)果中可以得出,alice 用戶并沒(méi)有插入成功,這與我們的分析一致,也驗(yàn)證了事務(wù)的強(qiáng)大。

5. 小結(jié)

  • 事務(wù)是數(shù)據(jù)庫(kù)的重點(diǎn),也是很多框架的重點(diǎn),是支撐并發(fā)的基石,因此請(qǐng)務(wù)必多多練習(xí)事務(wù)的使用。
  • 事務(wù)的四大特性雖然內(nèi)容較多,但歷來(lái)都是面試的重點(diǎn),請(qǐng)務(wù)必理解并且熟稔于心。