時(shí)間:2024-02-28 13:28作者:下載吧人氣:28
本文實(shí)例講述了PostgreSQL數(shù)據(jù)庫(kù)事務(wù)實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
事務(wù)簡(jiǎn)介
事務(wù)是所有數(shù)據(jù)庫(kù)系統(tǒng)的一個(gè)基本概念。 一次事務(wù)的要點(diǎn)就是它把多個(gè)步驟捆綁成了一個(gè)單一的,不成功則成仁的操作。 其它并發(fā)的事務(wù)是看不到在這些步驟之間的中間狀態(tài)的,并且如果發(fā)生了一些問(wèn)題, 導(dǎo)致該事務(wù)無(wú)法完成,那么所有這些步驟都完全不會(huì)影響數(shù)據(jù)庫(kù)。PostgreSQL為每條事務(wù)創(chuàng)建一個(gè)postgre進(jìn)程,并發(fā)執(zhí)行事務(wù)。采用分層的機(jī)制執(zhí)行事務(wù),上層事務(wù)塊和底層事務(wù)。上層事務(wù)塊是用戶眼中的事務(wù),用于控制事務(wù)執(zhí)行的狀態(tài);底層事務(wù)是事務(wù)中的每條語(yǔ)句,可以改變上層事務(wù)塊的狀態(tài)。
上層事務(wù)塊
每個(gè)postgre進(jìn)程只有一個(gè)事務(wù)塊,上層事務(wù)塊記錄著本次事務(wù)執(zhí)行過(guò)程中的各個(gè)狀態(tài)。
typedef enum TBlockState
{
/* not-in-transaction-block states */
TBLOCK_DEFAULT, /* idle */
TBLOCK_STARTED, /* 執(zhí)行簡(jiǎn)單查詢事務(wù) */
/* transaction block states */
TBLOCK_BEGIN, /* 遇見(jiàn)事務(wù)開(kāi)始BEGIN */
TBLOCK_INPROGRESS, /* 事務(wù)正在執(zhí)行中 */
TBLOCK_PARALLEL_INPROGRESS, /* live transaction inside parallel worker */
TBLOCK_END, /* 遇見(jiàn)事務(wù)結(jié)束COMMIT/END的時(shí)候設(shè)置 */
TBLOCK_ABORT, /* 事務(wù)出錯(cuò),等待ROLLBACK */
TBLOCK_ABORT_END, /* 事務(wù)出錯(cuò),收到ROLLBACK */
TBLOCK_ABORT_PENDING, /* 事務(wù)處理中,接收到ROLLBACK */
TBLOCK_PREPARE, /* 事務(wù)處理中,收到PREPARE(分布式事務(wù)) */
/* subtransaction states */
TBLOCK_SUBBEGIN, /* starting a subtransaction */
TBLOCK_SUBINPROGRESS, /* live subtransaction */
TBLOCK_SUBRELEASE, /* RELEASE received */
TBLOCK_SUBCOMMIT, /* COMMIT received while TBLOCK_SUBINPROGRESS */
TBLOCK_SUBABORT, /* failed subxact, awaiting ROLLBACK */
TBLOCK_SUBABORT_END, /* failed subxact, ROLLBACK received */
TBLOCK_SUBABORT_PENDING, /* live subxact, ROLLBACK received */
TBLOCK_SUBRESTART, /* live subxact, ROLLBACK TO received */
TBLOCK_SUBABORT_RESTART /* failed subxact, ROLLBACK TO received */
} TBlockState;
網(wǎng)友評(píng)論