成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server臟讀方式數據提取--NOLOCK和READPAST

數據庫 SQL Server
對數據庫中的數據進行讀操作或修改時,數據庫引擎使用專門的控制類型來保持數據庫的完整性,稱為鎖機制。鎖機制通過確保包含在一個事務中的數據庫記錄在該事務提交之前不能被其它事務修改來保證數據庫的一致性。

對數據庫中的數據進行讀操作或修改時,數據庫引擎使用專門的控制類型來保持數據庫的完整性,稱為鎖機制。鎖機制通過確保包含在一個事務中的數據庫記錄在該事務提交之前不能被其它事務修改來保證數據庫的一致性。

在設計數據庫應用時,你應該記住各種不同類型的鎖及事務發生的不同隔離級別。通常情況下,SQL Server默認方式能夠很好地完成你要使用的功能,不過,有些時候利用SQL語句在數據表上手工添加關于鎖是如何應用的提示信息將是十分有用的。

本文主要介紹了兩種數據表提示:NOLOCK和READPAST。我們將建立一個數據表用作例子中的查詢數據表。執行列表A中的腳本建立一個SalesHistory數據表并添加一些數據。

NOLOCK

該數據表提示,也稱為READUNCOMMITTED,只能用于SELECT語句。NOLOCK表明沒有對數據表添加共享鎖以阻止其它事務對數據表數據的修改。

該語句的好處是它可以使數據庫引擎不用在處理查詢中的上鎖問題,可以提高并發性并改善數據庫性能,因為數據庫引擎不用在維護共享鎖的使用問題。存在的問題是因為該語句不能處理要讀取的數據表的所有鎖,所以一些“臟數據”或未被提交的數據潛在的可能被讀取。

如果某個事務被滾回,那么應用了NOLOCK連接的數據讀取操作將可以讀取未提交的數據。這種類型的讀取導致處理的不一致性會帶來很多問題。這是你使用NOLOCK時應該了解的技巧。

作為一個負面影響,NOLOCK查詢還可能帶來讀取“幻影”數據或讀取在一個數據庫讀取事務中可以獲得的但在另一個事務中可能被滾回的數據的風險。(我將在本系列文章的第二部分對這個負面影響進行詳細說明。)

下面的例子展示了NOLOCK如何工作以及臟數據讀取是如何產生的。在下面的腳本中,我用一個事務在SalesHistory數據表中插入一條記錄。

 

  1. BEGIN TRANSACTION 
  2. INSERT INTO SalesHistory 
  3. (Product, SaleDate, SalePrice) 
  4. VALUES 
  5. ('PoolTable', GETDATE(), 500) 

這個事務仍舊是開放的,這意味著仍可以對插入數據表的記錄上鎖以阻止其它操作。在一個新的查詢窗口中,運行下面的腳本,該腳本使用NOLOCK數據表提示返回SalesHistory數據表中的記錄數。

  1. SELECT COUNT(*) FROM SalesHistory WITH(NOLOCK) 

返回記錄數值為301。因為對SalesHistory數據表插入記錄的事務還沒有提交,所以我們可以撤銷它。我通過使用下面的語句將事務滾回:

  1. ROLLBACK TRANSACTION 

該語句從SalesHistory數據表中刪除前面插入的記錄。現在我們運行前面運行的同樣的SELECT語句。

  1. SELECT COUNT(*) FROM SalesHistory WITH(NOLOCK) 

這次返回記錄數的值為300。我***次查詢讀記錄的事務還沒有提交,這就是一個臟數據讀取。

READPAST

這是一個比NOLOCK較少使用的數據表提示。這個提示指明數據庫引擎返回結果時忽略加鎖的行或數據頁。

這個數據表提示的優點和NOLOCK一樣,在處理查詢時不會發生阻塞。此外,讀臟數據并不會出現在READPASTA中,因為不會返回鎖定的記錄。這個語句的缺點是,因為不返回鎖定的記錄,所以很難確定結果集或修改語句是否包含所有必須的記錄。在你的應用中可能需要添加一些邏輯來確保最終包含所有必須的記錄。

READPAST數據表提示的例子和NOLOCK的例子類似。我將使用一個事務來更新SalesHistory數據表中的一個記錄。

 

  1. BEGIN TRANSACTION 
  2. UPDATE TOP(1) SalesHistory 
  3. SET SalePrice = SalePrice + 1 

因為我沒有提交或回滾這個事務,所以添加在更新記錄上的鎖仍舊有效。在一個新的查詢編輯窗口中,運行下面的腳本,該腳本對SalesHistory數據表使用READPAST統計表中的記錄數。

 

  1. SELECT COUNT(*) 
  2. FROM SalesHistory WITH(READPAST) 

最初SalesHistory數據表中包含300條記錄,UPDATE語句正鎖定表中一條記錄,所以上面使用READPAST的腳本返回結果為299條記錄,這說明我要更新的記錄被鎖定,所以被REASPAST提示忽略。

原文鏈接:http://www.cnblogs.com/huanghai223/archive/2011/08/17/2143360.html

【編輯推薦】

  1. 養成一個SQL好習慣帶來一筆大財富
  2. 客戶的一次疏忽,DBA的一次噩夢
  3. 數據庫的輪回
  4. 講述MySQL索引和優化的故事
  5. 擦亮自己的眼睛去看SQL Server

 

 

責任編輯:艾婧 來源: 鉆石眼淚的博客
相關推薦

2011-08-18 10:07:53

SQL Server臟NOLOCKREADPAST

2010-07-16 09:06:51

SQL Server數

2011-08-11 09:12:31

SQL Server nolock

2021-10-13 06:49:13

SQL Server優化

2022-04-27 07:32:02

臟讀幻讀不可重復讀

2021-04-20 19:21:50

臟讀MySQL幻讀

2019-03-21 09:06:00

數據庫復讀幻讀

2024-04-24 08:26:35

事務數據InnoDB

2023-02-02 11:53:44

nolock關鍵詞SQLserver

2022-01-03 07:18:05

臟讀幻讀 MySQL

2015-04-09 14:26:07

2025-02-26 10:40:44

數據庫并發幻讀

2023-11-01 14:13:00

MySQL事務隔離級別

2021-05-17 06:57:34

SQLServer數據庫

2024-04-19 08:18:47

MySQLSQL隔離

2011-08-15 17:55:49

提取MapInfo地圖SQL Server

2022-11-15 08:35:00

SQLNOLOCK數據

2023-04-06 08:43:29

SQLWITH(NOLOCK

2025-06-20 08:00:37

2022-06-09 08:32:21

SQLNOLOCKWITH
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产毛片毛片 | 天天干天天插 | 伊人久久免费视频 | 久久这里只有精品首页 | 青青久草 | a黄视频 | 精品日韩欧美一区二区 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 在线观看成年视频 | 亚洲www啪成人一区二区 | 成人精品国产一区二区4080 | 97视频在线免费 | 久久婷婷国产麻豆91 | 亚洲精品一 | 午夜在线免费观看视频 | 中文字幕在线一区二区三区 | 国产色 | 日韩精品成人av | 午夜精品一区 | 日韩精品久久一区二区三区 | 一区二区三区四区在线 | 亚洲国产情侣 | 精品视频一区二区三区在线观看 | 成人免费视屏 | 黄色三级免费网站 | 久久久资源| 午夜免费在线观看 | 中文字幕在线免费视频 | 在线观看中文字幕av | 视频一区二区三区中文字幕 | 国产精品一区二区电影 | 欧美在线视频一区二区 | 国产精品久久久久免费 | 久久九九免费 | 亚洲精品久久久久久久久久久 | 国产精品永久在线观看 | www.午夜| 黄色免费在线观看网址 | 日韩亚洲欧美一区 | 亚洲伊人精品酒店 | 国产成人免费网站 |