[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 數據庫 > 其它 > 正文
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-BEGIN
編譯:何偉平 laser@zhengmai.com.cn (2001-04-21 21:41:48)

BEGIN
名稱
BEGIN  以鏈的模式開始一個事務
語法
  
BEGIN [ WORK | TRANSACTION ]
輸入
WORK, TRANSACTION 
可選關鍵字。它們沒有作用。 

輸出
BEGIN 
這表明一個新的事務已經開始. 
NOTICE: BEGIN: already a transaction in progress 
這表明該事務已經運行,當前事務沒有被影響. 

描述
缺省時,Postgres 以非鏈接模式(unchained mode)執行一個事務(在其他數據庫系統裡也稱之為“自動提交”("autocommit"))。換句話說,每個用戶語句都是在其自身的事務中運行並且在語句結束時隱含的調用一個提交(commit)(如果執行成功則提交,否則調用一個回卷)。 BEGIN 以鏈接模式(chained mode)初始化一個用戶事務,也就是說所有 BEGIN 命令的用戶語句都將在一個事務裡面執行直到一個顯式的 COMMIT,ROLLBACK,或執行退出。在鏈接模式裡執行的語句很明顯地快得多,因為事務開始/提交(start/commit)需要大量的CPU和磁盤活動。在一個事務內部執行多條語句時因為可能修改若幹個相關的表因而同樣需要一致性。 
在 Postgres 裡缺省的事務隔離級別是 READ COMMITTED,這時在事務內部的查詢只看到查詢提交之前的(數據)修改。所以,如果你需要更嚴格的事務隔離,你必須在 BEGIN 馬上使用 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE。在 SERIALIZABLE 模式裡,查詢將只能看到整個事務開始之前的修改。(實際上是在一個可串行化事務內部第一個 DML 語句執行前的數據)。 

如果提交了事務,Postgres 將保証要實現所有更新,要所有更新都沒有實現。事務有標準的ACID(不可分割性,一致性,隔離性,持續性)(atomic,consistent,isolatable,and durable)屬性。 

注意
請參考 LOCK 語句獲取關在事務內部鎖定一個表的詳細信息. 
使用 COMMIT 或 ROLLBACK  結束一個事務.

用法
開始一個用戶事務: 
BEGIN WORK;

兼容性
SQL92
BEGIN 是 Postgres 語言的擴展.在 SQL92 中沒有顯式的 BEGIN 的定義;事務初始化總是隱含的而且使用一個 COMMIT 或 ROLLBACK 語句終止. 
注意:許多關系型數據庫為了方便提供一個自動提交(autocommit)特性。
順便說一句,BEGIN 關鍵字在嵌入 SQL 裡用不同的目的。我們建議你在移植數據庫應用時仔細檢查事務的語意。 
SQL92 還要求事務的缺省隔離級別是 SERIALIZABLE。

(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
PostgreSQL7.0手冊-附錄-文檔 (2001-04-21 23:50:44)
PostgreSQL7.0手冊-附錄-日期/時間支持-CVS 倉庫 (2001-04-21 23:48:48)
PostgreSQL7.0手冊-教程 -73. Postgres SQL 高級特性 (2001-04-21 23:45:36)
PostgreSQL7.0手冊-教程 -72. 查詢語言 (2001-04-21 23:44:40)
PostgreSQL7.0手冊-教程 -71. 開始 (2001-04-21 23:42:54)
PostgreSQL7.0手冊-教程 -70. 體系結構 (2001-04-21 23:41:58)
PostgreSQL7.0手冊-教程 -69. SQL (2001-04-21 23:41:23)
PostgreSQL7.0手冊-開發者手冊 -68. 分頁文件 (2001-04-21 23:39:22)
PostgreSQL7.0手冊-開發者手冊 -67. 端接口 (2001-04-21 23:38:34)
PostgreSQL7.0手冊-開發者手冊 -66. gcc 缺省優化 (2001-04-21 23:37:20)

===更多相關===
 

★  樊強制作 歡迎分享  ★