亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入理解PostgreSQL 事務(wù)處理

 更新時(shí)間:2025年06月16日 09:37:26   作者:熊大如如  
PostgreSQL事務(wù)處理確保數(shù)據(jù)一致性,支持四種隔離級別,處理臟讀、不可重復(fù)讀和幻讀問題,并可通過會(huì)話或配置文件設(shè)置,自動(dòng)提交默認(rèn)開啟,感興趣的可以了解一下

簡介

PostgreSQL 事務(wù)處理(Transaction Processing)是指在數(shù)據(jù)庫中執(zhí)行一系列 SQL 語句,使其成為一個(gè)不可分割的操作單元,即 要么全部執(zhí)行成功,要么全部回滾,以確保數(shù)據(jù)的一致性和完整性

準(zhǔn)備工作

  • 創(chuàng)建演示表
CREATE TABLE "public"."users" (
  "user_account" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "username" varchar(32) COLLATE "pg_catalog"."default",
  "user_avatar" varchar(64) COLLATE "pg_catalog"."default",
  "user_profile" varchar(512) COLLATE "pg_catalog"."default",
  "hashed_password" varchar COLLATE "pg_catalog"."default" NOT NULL
);

基本操作

  • 提交事務(wù)
BEGIN; -- 開啟事務(wù)

-- SQL 語句
INSERT INTO users (user_account, hashed_password) VALUES ('Alice', 'xxxx');

COMMIT; -- 提交事務(wù)
  • 回滾事務(wù)
BEGIN

DELETE FROM users;

ROLLBACK;
  • 設(shè)置回滾點(diǎn)

SAVEPOINT 允許在事務(wù)內(nèi)部創(chuàng)建回滾點(diǎn),部分 SQL 語句可以回滾,而不影響其他 SQL

BEGIN;

INSERT INTO users (user_account, hashed_password) VALUES ('Alice', 'xxxx');
SAVEPOINT sp1; -- 創(chuàng)建回滾點(diǎn)

INSERT INTO users (user_account, hashed_password) VALUES ('Alice2', 'xxxx');
SAVEPOINT sp2;

INSERT INTO users (user_account, hashed_password) VALUES ('Alice3', 'xxxx');
ROLLBACK TO sp2;

COMMIT; -- 提交事務(wù)

事務(wù)隔離級別

簡介

在數(shù)據(jù)庫中,事務(wù)隔離級別(Transaction Isolation Levels)用于控制多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)的可見性,避免數(shù)據(jù)不一致的問題。PostgreSQL 遵循 ACID(原子性、一致性、隔離性、持久性) 原則,并提供四種事務(wù)隔離級別

隔離級別臟讀不可重復(fù)讀幻讀
讀未提交? 可能發(fā)生? 可能發(fā)生? 可能發(fā)生
讀已提交(默認(rèn))? 不會(huì)發(fā)生? 可能發(fā)生? 可能發(fā)生
可重復(fù)讀? 不會(huì)發(fā)生? 不會(huì)發(fā)生? 可能發(fā)生
可串行化? 不會(huì)發(fā)生? 不會(huì)發(fā)生? 不會(huì)發(fā)生

下面我們來逐一介紹

讀未提交/讀已提交

PostgreSQL 不真正支持 讀未提交 這個(gè)級別,而是當(dāng)作 **讀已提交 **處理

即,就算你設(shè)置了這個(gè)級別,PG 數(shù)據(jù)庫還是會(huì)使用 讀已提交 級別事務(wù)隔離

臟讀示例(PG 不支持)

BEGIN; -- 事務(wù)1
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
UPDATE users SET hashed_password = 'new_hash' WHERE user_account = 'Alice';
SELECT txid_current(); -- 查看當(dāng)前事務(wù)id
-- 保持事務(wù)未提交

BEGIN; -- 事務(wù)2
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM users WHERE user_account = 'Alice';
SELECT txid_current();


ROLLBACK; -- 釋放鎖,事務(wù) 2 的查詢繼續(xù)執(zhí)行

注意:我的 navacat17 版本,一個(gè)查詢頁面執(zhí)行的語句是同一個(gè)事務(wù),所以想讓上面語句生效,你可能需要開啟兩個(gè)查詢頁面,分別執(zhí)行事務(wù) 1 和 2

不可重復(fù)讀

  • 事務(wù) 1
BEGIN;
SELECT hashed_password FROM users;
  • 事務(wù) 2
BEGIN;
UPDATE users SET hashed_password = 'xxxx';
COMMIT;
  • 事務(wù) 1
SELECT hashed_password FROM users;

問題:事務(wù) 1 在第一次 SELECT 時(shí)看到的是 hashed_password 與 第二次查詢時(shí)hashed_password 不一致,這就是不可重復(fù)讀

幻讀

  • 事務(wù) 1
BEGIN;
SELECT COUNT(*) FROM users; -- 假設(shè)是3
  • 事務(wù) 2
BEGIN;
INSERT INTO users (user_account, hashed_password) VALUES ('Alice4', 'xxxx');
COMMIT; -- 增加到4
  • 事務(wù) 1
SELECT COUNT(*) FROM users; -- 增加到4

問題:事務(wù) 1 在開始時(shí)認(rèn)為 users 里數(shù)據(jù)為 3,但在事務(wù)進(jìn)行中,別的事務(wù)插入了一條數(shù)據(jù),事務(wù) 1 重新查詢時(shí),發(fā)現(xiàn)數(shù)據(jù)數(shù)量變了,這就是幻讀!

其余隔離級別,有需求可自行查詢~

設(shè)置事務(wù)隔離級別

在事務(wù)中設(shè)置

BEGIN;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- SQL 語句
COMMIT;

在會(huì)話級別設(shè)置

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  • 這會(huì)影響當(dāng)前會(huì)話中的所有事務(wù)

在 PostgreSQL 配置文件 postgresql.conf 設(shè)置(全局)

default_transaction_isolation = 'read committed'
  • 影響所有數(shù)據(jù)庫的默認(rèn)隔離級別

自動(dòng)提交

PostgreSQL 默認(rèn)開啟自動(dòng)提交模式,即每條 SQL 語句都會(huì)被自動(dòng)提交。如果要手動(dòng)管理事務(wù),需要顯式使用 BEGIN

SET AUTOCOMMIT TO OFF;

到此這篇關(guān)于深入理解PostgreSQL 事務(wù)處理的文章就介紹到這了,更多相關(guān)PostgreSQL 事務(wù)處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • PostgreSQL游標(biāo)與索引選擇實(shí)例詳細(xì)介紹

    PostgreSQL游標(biāo)與索引選擇實(shí)例詳細(xì)介紹

    這篇文章主要介紹了PostgreSQL游標(biāo)與索引選擇優(yōu)化案例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • PostgreSQL數(shù)據(jù)DML誤操作恢復(fù)方法

    PostgreSQL數(shù)據(jù)DML誤操作恢復(fù)方法

    PostgreSQL是一種開源的對象關(guān)系型數(shù)據(jù)庫管理系統(tǒng),其DML(Data Manipulation Language)負(fù)責(zé)數(shù)據(jù)的操作和管理,那么如何DML誤操作了如何恢復(fù),所以本文介紹了PostgreSQL數(shù)據(jù)DML誤操作恢復(fù)方法,需要的朋友可以參考下
    2024-12-12
  • 使用docker compose啟動(dòng)postgresql的示例代碼

    使用docker compose啟動(dòng)postgresql的示例代碼

    要在啟動(dòng) PostgreSQL 容器時(shí)執(zhí)行特定的初始化文件,可以使用 Docker 的 docker-entrypoint-initdb.d 目錄,這個(gè)目錄下的 SQL 文件會(huì)在容器啟動(dòng)時(shí)被自動(dòng)執(zhí)行,下面是如何修改 Docker Compose 配置文件,以便在啟動(dòng)時(shí)執(zhí)行初始化 SQL 腳本,需要的朋友可以參考下
    2024-10-10
  • 解決postgresql 數(shù)字轉(zhuǎn)換成字符串前面會(huì)多出一個(gè)空格的問題

    解決postgresql 數(shù)字轉(zhuǎn)換成字符串前面會(huì)多出一個(gè)空格的問題

    這篇文章主要介紹了解決postgresql 數(shù)字轉(zhuǎn)換成字符串前面會(huì)多出一個(gè)空格的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL之連接失敗的問題及解決

    PostgreSQL之連接失敗的問題及解決

    這篇文章主要介紹了PostgreSQL之連接失敗的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • PostgreSQL設(shè)置主鍵自增的方法詳解

    PostgreSQL設(shè)置主鍵自增的方法詳解

    在使用Mysql時(shí),創(chuàng)建表結(jié)構(gòu)時(shí)可以通過關(guān)鍵字auto_increment來指定主鍵是否自增,但在Postgresql數(shù)據(jù)庫中,雖然可以實(shí)現(xiàn)字段的自增,但從本質(zhì)上來說卻并不支持Mysql那樣的自增,所以本文給大家介紹了PostgreSQL如何設(shè)置主鍵自增,需要的朋友可以參考下
    2024-08-08
  • 使用PostgreSQL創(chuàng)建高級搜索引擎的代碼示例

    使用PostgreSQL創(chuàng)建高級搜索引擎的代碼示例

    本文我們將探索PostgreSQL中的全文搜索功能,并研究我們能夠復(fù)制多少典型搜索引擎功能,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2023-07-07
  • PostgreSQL無法查看表中數(shù)據(jù)問題的原因和解決方法

    PostgreSQL無法查看表中數(shù)據(jù)問題的原因和解決方法

    在 PostgreSQL 中,恢復(fù)數(shù)據(jù)庫后,使用 DBeaver 等工具可以看到數(shù)據(jù)庫和表名,但無法查詢到表中數(shù)據(jù),可能有很多原因,本文給大家分析了PostgreSQL無法查看表中數(shù)據(jù)問題的原因和解決方法,需要的朋友可以參考下
    2025-04-04
  • PostgreSQL創(chuàng)建新用戶所遇見的權(quán)限問題以及解決辦法

    PostgreSQL創(chuàng)建新用戶所遇見的權(quán)限問題以及解決辦法

    這篇文章主要給大家介紹了關(guān)于PostgreSQL創(chuàng)建新用戶所遇見的權(quán)限問題以及解決辦法, 在PostgreSQL中創(chuàng)建一個(gè)新用戶非常簡單,但可能會(huì)遇到權(quán)限問題,需要的朋友可以參考下
    2023-09-09
  • PostgreSQL對GROUP BY子句使用常量的特殊限制詳解

    PostgreSQL對GROUP BY子句使用常量的特殊限制詳解

    這篇文章主要介紹了PostgreSQL對GROUP BY子句使用常量的特殊限制詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論