程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> 使用 TOP 子句限制UPDATE 語句更新的數據,topupdate

使用 TOP 子句限制UPDATE 語句更新的數據,topupdate

編輯:更多數據庫知識

使用 TOP 子句限制UPDATE 語句更新的數據,topupdate


可以使用 TOP 子句來限制 UPDATE 語句中修改的行數。當 TOP (n) 子句與 UPDATE 一起使用時,將針對隨機選擇的 n 行執行刪除操作。例如,假設您要為一位高級銷售人員減輕銷售負擔,而將一些客戶分配給了一位初級銷售人員。下列示例將隨機抽樣的 10 個客戶從一位銷售人員分配給了另一位。

 USE AdventureWorks2008R2;
 UPDATE TOP (10) Sales.Store
 SET SalesPersonID = 276
 WHERE SalesPersonID = 275;
 GO

如果需要使用 TOP 來應用按有意義的時間順序排列的更新,您必須同時使用 TOP 和 ORDER BY 子句。下列示例更新了雇傭最早的 10 名雇員的假期小時數。

 UPDATE HumanResources.Employee
 SET VacationHours = VacationHours + 8
 FROM (SELECT TOP 10 BusinessEntityID FROM HumanResources.Employee
   ORDER BY HireDate ASC) AS th
 WHERE HumanResources.Employee.BusinessEntityID = th.BusinessEntityID;
 GO

參考:http://technet.microsoft.com/zh-CN/library/ms180971


在update語句中使用where子句的目的是什?

where後面的語句是條件 說明只更新根據where條件過濾的數據
 

數據庫中Select For update語句的解析

他們已經說了相關的東西了
我再補充幾點:
分成兩類:加鎖范圍子句和加鎖行為子句

加鎖范圍子句:
在select…for update之後,可以使用of子句選擇對select的特定數據表進行加鎖操作。默認情況下,不使用of子句表示在select所有的數據表中加鎖
加鎖行為子句:

當我們進行for update的操作時,與普通select存在很大不同。一般select是不需要考慮數據是否被鎖定,最多根據多版本一致讀的特性讀取之前的版本。加入for update之後,Oracle就要求啟動一個新事務,嘗試對數據進行加鎖。如果當前已經被加鎖,默認的行為必然是block等待。使用nowait子句的作用就是避免進行等待,當發現請求加鎖資源被鎖定未釋放的時候,直接報錯返回。
在日常中,我們對for update的使用還是比較普遍的,特別是在如pl/sql developer中手工修改數據。此時只是覺得方便,而對for update真正的含義缺乏理解。
For update是Oracle提供的手工提高鎖級別和范圍的特例語句。Oracle的鎖機制是目前各類型數據庫鎖機制中比較優秀的。所以,Oracle認為一般不需要用戶和應用直接進行鎖的控制和提升。甚至認為死鎖這類鎖相關問題的出現場景,大都與手工提升鎖有關。所以,Oracle並不推薦使用for update作為日常開發使用。而且,在平時開發和運維中,使用了for update卻忘記提交,會引起很多鎖表故障。

那麼,什麼時候需要使用for update?就是那些需要業務層面數據獨占時,可以考慮使用for update。場景上,比如火車票訂票,在屏幕上顯示郵票,而真正進行出票時,需要重新確定一下這個數據沒有被其他客戶端修改。所以,在這個確認過程中,可以使用for update。這是統一的解決方案方案問題,需要前期有所准備。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved