SQL事務(wù)的相關(guān)內(nèi)容,是在SQL標(biāo)準(zhǔn)的SQL/基" />
時(shí)間:2022-11-08 10:30:01 | 來源:信息時(shí)代
時(shí)間:2022-11-08 10:30:01 來源:信息時(shí)代
SQL事務(wù) : 一條或多條SQL語句的執(zhí)行序列,該序列作為一個(gè)整體,在恢復(fù)時(shí)具有原子性,即事務(wù)中的所有語句或者全部成功執(zhí)行,或者一條語句也不執(zhí)行。
SQL事務(wù)的相關(guān)內(nèi)容,是在SQL標(biāo)準(zhǔn)的SQL/基礎(chǔ)部分中定義的。SQL標(biāo)準(zhǔn)中關(guān)于SQL事務(wù)的內(nèi)容主要包括:
1. 事務(wù)管理
執(zhí)行BEGIN TRANSACTION語句或調(diào)用引起事務(wù)初始化的SQL語句將初始化一個(gè)SQL事務(wù),執(zhí)行COMMIT語句或ROLLBACK語句將終止一個(gè)SQL事務(wù)。如果SQL事務(wù)是通過成功執(zhí)行COMMIT語句而終止,則該SQL事務(wù)對SQL數(shù)據(jù)或模式所作的變更是持久的。如果SQL事務(wù)是通過ROLLBACK語句終止的,則該SQL事務(wù)對SQL數(shù)據(jù)或模式的所有變更均被撤銷。
SQL標(biāo)準(zhǔn)中具體的事務(wù)管理語句如下:
(1) 開始事務(wù)語句:START TRANSACTION [隔離級(jí)|READ ONLY| READ WRITE]。READ ONLY表示該事務(wù)的訪問方式為只讀,READ WRITE表示該事務(wù)的訪問方式為讀寫。
(2)提交語句:COMMIT[WORK]。提交語句有COMMIT和COMMIT WORK兩種等價(jià)形式。
(3)回滾語句: ROLLBACK[WORK][保存點(diǎn)]。同樣,回滾語句也有ROLLBACK和ROLLBACK WORK兩種等價(jià)形式。保存點(diǎn)則用來實(shí)現(xiàn)SQL事務(wù)的部分回滾,具體將在下面介紹。
2. SQL事務(wù)的隔離級(jí)
SQL標(biāo)準(zhǔn)中把訪問相同SQL數(shù)據(jù)或模式并且在時(shí)間上相互重疊的多個(gè)SQL事務(wù)稱為并發(fā)SQL事務(wù)。SQL事務(wù)的隔離級(jí)是該SQL事務(wù)受并發(fā)SQL事務(wù)的影響及可能影響并發(fā)SQL事務(wù)的程度。SQL事務(wù)有四種不同的隔離級(jí): READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。隔離級(jí)和并發(fā)SQL事務(wù)執(zhí)行過程中可能發(fā)生的幾種現(xiàn)象相關(guān),這幾種現(xiàn)象分別是:
(1) P1(“臟讀”):SQL事務(wù)T1修改某一行,SQL事務(wù)T2在T1執(zhí)行COMMIT之前讀取該行。如果此時(shí)T1執(zhí)行ROLLBACK,T2就會(huì)讀取從未提交而被認(rèn)為是從未存在的一行。
(2) P2(“不可重復(fù)讀”): SQL事務(wù)T1讀取某一行,SQL事務(wù)T2修改或刪除該行,并執(zhí)行COMMIT。如果T1此時(shí)試圖重讀該行,則它可能讀到被修改后的值,或發(fā)現(xiàn)該行已被刪除。
(3) P3(“幻象”): SQL事務(wù)T1讀取滿足某個(gè)搜索條件的行集,SQL事務(wù)T2執(zhí)行滿足T1所用搜索條件的SQL語句來產(chǎn)生一行或多行,如果SQL事務(wù)T1此時(shí)使用相同的搜索條件重復(fù)初始讀操作,則會(huì)得到不同的行集。
四種隔離級(jí)可確保每個(gè)SQL事務(wù)要么執(zhí)行完,要么根本不執(zhí)行,且不丟失任何更新。相對于現(xiàn)象P1、P2和P3所采用的隔離級(jí)是不同的。表1指定對于給定的隔離級(jí),某一現(xiàn)象是否可能發(fā)生。
表1 SQL事務(wù)隔離級(jí)與三種現(xiàn)象
級(jí) | P1 | P2 | P3 |
READ UNCOMMITTED | 可能 | 可能 | 可能 |
READ COMMITTED | 不可能 | 可能 | 可能 |
REPEATABLE READ | 不可能 | 不可能 | 可能 |
SERIALIZABLE | 不可能 | 不可能 | 不可能 |
客戶&案例
營銷資訊
關(guān)于我們
微信公眾號(hào)
版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。