第10章 事務和游標_第1頁
第10章 事務和游標_第2頁
第10章 事務和游標_第3頁
第10章 事務和游標_第4頁
第10章 事務和游標_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、An Introduction to Database Systems1/55An Introduction to Database Systems1/80第第10章章 事務和游標事務和游標 10.1 事務事務 10.2 游標游標 10.3 C#數(shù)據(jù)庫事務數(shù)據(jù)庫事務 An Introduction to Database Systems2/5510.1 事務事務 10.1.1 事務概述 在SQL Server中,事務是完成一個應用處理的最小單元,由一個或多個對數(shù)據(jù)庫操作的語句組成。事務作為一個完整的執(zhí)行單元,如果執(zhí)行成功,事務中進行的數(shù)據(jù)更新會全部提交;如果事務中有一個語句執(zhí)行失敗,則取消全部

2、操作,并將數(shù)據(jù)庫恢復到事務執(zhí)行之前的狀態(tài)。這樣確保數(shù)據(jù)的的一致性。 例如:A打算給B轉帳1000。就要把A的帳戶減少1000,B帳戶增加1000,如果第一步執(zhí)行了,而第二步沒有執(zhí)行,那么就會有問題了,我們現(xiàn)在要做的就是保證這兩步要么都執(zhí)行,要么都不執(zhí)行,即任意一個失敗都要回滾。 An Introduction to Database Systems3/55 在SQL Server中,事務作為單個邏輯工作單元來執(zhí)行一系列操作,具有4個特點(ACID屬性):原子性、一致性、隔離性和持久性。(1)原子性:事務必須是原子工作單元,事務中的操作要么全都執(zhí)行,要么全都不執(zhí)行。事務是實現(xiàn)原子性的手段,原子性

3、是指某些事情要么全部發(fā)生,要么都不發(fā)生,我們都知道,程序的執(zhí)行是有順序的,在程序的執(zhí)行過程中,難免會出現(xiàn)錯誤,如果對于某些必須作為原子性事務發(fā)生的事,在執(zhí)行過程中,有一部執(zhí)行了,還有另外一部分由于某種錯誤而沒有執(zhí)行,就會出現(xiàn)大麻煩。(2)一致性:事務在完成時,必須使所有的數(shù)據(jù)都保持一致狀態(tài)。在相關數(shù)據(jù)庫中,所有規(guī)則都必須應用于事務的修改,以保持所有數(shù)據(jù)的完整性。事務結束時,所有的內部數(shù)據(jù)都必須是正確的。例如:在一個用戶未提交他的事務前(比如更新一個字段),其他用戶 Select 出來的結果都一樣。10.1 事務事務 An Introduction to Database Systems4/55

4、(3)隔離性:由并發(fā)事務所做的修改必須與任何其他并發(fā)事務所做的修改隔離。事務操作數(shù)據(jù)時數(shù)據(jù)的狀態(tài),要么是另一個并發(fā)事務修改它之前的狀態(tài),要么是另一個事務修改它之后的狀態(tài),事務不會處理中間狀態(tài)的數(shù)據(jù)。(4)持久性:事務完成之后,它對于系統(tǒng)的影響是永久性的。持久性意味著當系統(tǒng)或介質發(fā)生故障時,確保已提交事務的更新不能丟失。即一旦一個事務提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變應該是永久性的,耐得住任何數(shù)據(jù)庫系統(tǒng)故障。持久性通過數(shù)據(jù)庫備份和恢復來保證。事務模式有自動提交模式、顯示事務、隱式事務幾種。10.1 事務事務 An Introduction to Database Systems5/5510.1.2 自

5、動提交事務 自動提交模式是 SQL Server 數(shù)據(jù)庫引擎的默認事務管理模式。每個 Transact-SQL 語句在完成時,都被提交或回滾。如果一個語句成功地完成,則提交該語句;如果遇到錯誤,則回滾該語句。只要沒有顯式事務或隱性事務覆蓋自動提交模式,與數(shù)據(jù)庫引擎實例的連接就以此默認模式操作。在與SQL Server連接之后,直接進入自動事務模式,直到使用Begin Transaction 語句啟動一個顯式事務,或執(zhí)行Set IMPLICIT_TRANSACTIONS On語句將隱式事務模式開啟為止。當提交或回滾顯式事務,或執(zhí)行Set IMPLICIT_TRANSACTIONS Off關閉隱性

6、事務模式時,連接又返回到自動提交模式。10.1 事務事務 An Introduction to Database Systems6/5510.1.3 顯式事務 顯式事務是指由用戶通過Transact-SQL事務語句定義的事務。常用的Transact-SQL事務語句有:Begin Transaction、Commit Transaction、Rollback Transaction和Save Transaction語句。 10.1 事務事務 An Introduction to Database Systems7/551Begin Transaction Begin Transaction語句定

7、義一個本地顯式事務的起點,并將全局變量TranCount的值加1,具體的語法格式如下:Begin Tran | Transaction transaction_name | tran_name_variable10.1 事務事務 An Introduction to Database Systems8/55說明:(1)transaction_name:事務的名稱。transaction_name必須符合標識符規(guī)則,但標識符所包含的字符數(shù)不能大于32。在一系列嵌套的事務中,用一個事務名或多個事務名對該事務并沒有什么影響,系統(tǒng)僅登記第一個(最外層)事務名。(2)tran_name_variable

8、:由用戶定義的、含有有效事務名稱的變量的名稱。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明變量。如果傳遞給該變量的字符多于32 個,則僅使用前面的 32 個字符,其余的字符將被截斷。10.1 事務事務 An Introduction to Database Systems9/552Commit Transaction Commit Transaction語句標志一個事務成功執(zhí)行的結束。如果全局變量TranCount的值為1,則Commit Transaction將提交從事務開始以來所執(zhí)行的所有數(shù)據(jù)修改,釋放事務處理所占用的資源,并使TranCount的值為0

9、。如果TranCount的值大于1,則Commit Transaction命令將使TranCount的值減1,并且事務將保持活動狀態(tài)。具體的語法為: Commit Tran | Transaction transaction_name | tran_name_variable 10.1 事務事務 An Introduction to Database Systems10/55說明:(1)transaction_name:transaction_name 指定由前面的Begin Transaction分配的事務名稱。transaction_name 必須符合標識符規(guī)則,但不能超過 32 個字符。

10、transaction_name 通過向程序員指明 Commit Transaction與哪些 Begin Transaction 相關聯(lián),可作為幫助閱讀的一種方法。(2)tran_name_variable:由用戶定義的、含有有效事務名稱的變量的名稱。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明變量。如果傳遞給該變量的字符多于32 個,則僅使用前面的 32 個字符;其余的字符將被截斷。 當在嵌套事務中使用時,內部事務的提交并不釋放資源或使其修改成為永久修改。只有在提交了外部事務時,數(shù)據(jù)修改才具有永久性,而且資源才會被釋放。當 TranCount 大于1時,

11、每發(fā)出一個 Commit Transaction命令只會使 TranCount 按1遞減。當 TRANCOUNT 最終遞減為 0 時,將提交整個外部事務。 當TranCount為0時發(fā)出 Commit Transaction 將會導致出現(xiàn)錯誤,因為沒有相應的 Begin Transaction。10.1 事務事務 An Introduction to Database Systems11/553Rollback Transaction Rollback Transaction語句回滾顯式事務或隱式事務到事務的起始位置,或事務內部的保存點,同時釋放由事務控制的資源。 Rollback Tran

12、| Transaction transaction_name | tran_name_variable savepoint_name | savepoint_variable 10.1 事務事務 An Introduction to Database Systems12/55說明:(1)transaction_name:transaction_name 和tran_name_variable的含義和Begin Transaction語句中的含義相同。(2)savepoint_name:Save Transaction語句定義的保存點的名稱。savepoint_name 必須符合標識符規(guī)則。當回

13、滾只影響事務的一部分時,可使用 savepoint_name。(3)savepoint_variable:是用戶定義的、包含有效保存點名稱的變量的名稱。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明變量。 不能在發(fā)出Commit Transaction命令之后回滾事務,因為數(shù)據(jù)修改已經成為了數(shù)據(jù)庫的一個永久部分。10.1 事務事務 An Introduction to Database Systems13/554Save Transaction Save Transaction語句在事務內設置一個保存點,當事務執(zhí)行到該保存點時,SQL Server存儲所有被修

14、改的數(shù)據(jù)到數(shù)據(jù)庫中,具體的語法格式為: Save Tran | Transaction savepoint_name | savepoint_variable10.1 事務事務 An Introduction to Database Systems14/55說明:(1)savepoint_name:定義的保存點的名稱。savepoint_name 必須符合標識符規(guī)則。(2)savepoint_variable:是用戶定義的、包含有效保存點名稱的變量的名稱。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明變量。10.1 事務事務 An Introduction t

15、o Database Systems15/55 用戶可以在事務內設置保存點或標記。保存點可以定義在按條件取消某個事務的一部分后,該事務可以返回的一個位置。如果將事務回滾到保存點,則根據(jù)需要必須完成其他剩余的 Transact-SQL 語句和 Commit Transaction 語句,或者必須通過將事務回滾到起始點完全取消事務。 在事務中允許有重復的保存點名稱,但指定保存點名稱的 Rollback Transaction 語句只將事務回滾到使用該名稱的最近的 Save Transaction。10.1 事務事務 An Introduction to Database Systems16/55【

16、例10-1】使用本教材提供教學管理數(shù)據(jù)庫,實現(xiàn)以下功能:更新“學生課程信息表”中的課程號為“103”的課程名稱為“高等數(shù)學”。 begin transactionupdate 學生課程信息表 set 課程名稱=高等數(shù)學where 課程號=103if exists( select * from 教師任課信息表 where 課程號=103)begincommit transactionendelserollback transactionAn Introduction to Database Systems17/55圖10-1 例10-1的執(zhí)行過程 10.1 事務事務 An Introductio

17、n to Database Systems18/5510.1.4 隱式事務 當連接以隱性事務模式進行操作時,SQL Server將在提交或回滾當前事務后自動啟動新事務。因此,隱式事務不需要使用Begin Transaction語句標志事務的開始,只需要用戶使用Rollback Transaction語句或Commit Transaction語句回滾或提交事務。 10.1 事務事務 An Introduction to Database Systems19/55 當使用Set語句將IMPLICIT_TRANSACTIONS設置為On將隱性事務模式打開之后,SQL Server執(zhí)行下列任何語句都會

18、自動啟動一個事務:Alter Table、Create、Delete、Drop、Fetch、Grant、Insert、Open、Revoke、Select、Truncate Table、Update。在發(fā)出 Commit 或 Rollback 語句之前,該事務將一直保持有效。在第一個事務被提交或回滾之后,下次當連接執(zhí)行以上任何語句時,數(shù)據(jù)庫引擎實例都將自動啟動一個新事務。該實例將不斷地生成隱性事務鏈,直到隱性事務模式關閉為止。 10.1 事務事務 An Introduction to Database Systems20/5510.2 游標游標 由Select 語句返回的行集包括滿足該語句的

19、Where 子句中條件的所有行,這種由語句返回的完整行集稱為結果集。但是有時候應用程序并不總能將整個結果集作為一個單元來有效地處理,這些應用程序需要一種機制以便每次處理一行或一部分行。游標就是提供這種機制的對結果集的一種擴展。 An Introduction to Database Systems21/55使用游標具有以下優(yōu)點:(1)允許程序對由查詢語句Select返回的行集合中的每一行執(zhí)行相同或不同的操作,而不是對整個行集合執(zhí)行同一個操作。(2)提供對基于游標位置的表中的行進行刪除和更新的能力。(3)游標實際上作為面向集合的數(shù)據(jù)庫管理系統(tǒng)(RDBMS)和面向行的程序設計之間的橋梁,使這兩種處

20、理方式通過游標溝通起來。10.2 游標游標 An Introduction to Database Systems22/5510.2.1 游標類型游標類型 Microsoft SQL Server 2008支持兩種請求游標的方法: (1)Transact-SQL:使用Transact-SQL語句定義的游標。(2)數(shù)據(jù)庫應用程序編程接口(API)游標函數(shù):SQL Server 支持以下數(shù)據(jù)庫 API 的游標功能: ADO(Microsoft ActiveX 數(shù)據(jù)對象)OLE DBODBC(開放式數(shù)據(jù)庫連接)10.2 游標游標 An Introduction to Database Systems

21、23/55 根據(jù)游標檢測結果集變化的能力和消耗資源(如在 tempdb 中所占的內存和空間)的情況的不同,SQL Server支持的API服務器游標又分為四種: (1)靜態(tài)游標:該游標使用數(shù)據(jù)的臨時復本。對游標的所有請求都從 tempdb 中的這一臨時表中得到應答;因此,在對該游標進行提取操作時不反映對結果集所做的更改。10.2 游標游標 An Introduction to Database Systems24/55(2)動態(tài)游標:動態(tài)游標與靜態(tài)游標相對。當滾動游標時,動態(tài)游標反映結果集中所做的所有更改。結果集中的行數(shù)據(jù)值、順序和成員在每次提取時都會改變。所有用戶做的全部 Update、In

22、sert 和 Delete 語句均通過游標可見。如果使用 API 函數(shù)或 Transact-SQL Where Current of 子句通過游標進行更新,它們將立即可見。在游標外部所做的更新直到提交時才可見。10.2 游標游標 An Introduction to Database Systems25/5510.2 游標游標(3)只進游標:只進游標不支持滾動,它只支持游標從頭到尾順序提取。行只在從數(shù)據(jù)庫中提取出來后才能檢索。對所有由當前用戶發(fā)出或由其他用戶提交、并影響結果集中的行的 Insert、Update 和 Delete 語句,其效果在這些行從游標中提取時是可見的。由于游標無法向后滾動

23、,則在提取行后對數(shù)據(jù)庫中的行進行的大多數(shù)更改通過游標均不可見。An Introduction to Database Systems26/5510.2 游標游標(4)由鍵集驅動的游標:打開由鍵集驅動的游標時,該游標中各行的成員身份和順序是固定的。由鍵集驅動的游標由一組唯一標識符(鍵)控制,這組鍵稱為鍵集。鍵是根據(jù)以唯一方式標識結果集中各行的一組列生成的。鍵集是打開游標時來自符合 Select 語句要求的所有行中的一組鍵值。由鍵集驅動的游標對應的鍵集是打開該游標時在 tempdb 中生成的。當用戶滾動游標時,對非鍵集列中的數(shù)據(jù)值所做的更改是可見的。在游標外對數(shù)據(jù)庫所做的插入在游標內不可見,除非關

24、閉并重新打開游標。使用 API 函數(shù)通過游標所做的插入在游標的末尾可見。An Introduction to Database Systems27/5510.2.3 使用游標 利用Transact-SQL語句使用游標的操作包括:聲明游標、打開游標、提取數(shù)據(jù)、利用游標更新和刪除數(shù)據(jù)、關閉游標和釋放游標。 1聲明游標游標在使用之前,必須先聲明。Declare Cursor 既接受基于ISO標準的語法,也接受Transact-SQL 擴展的語法,下面分別對這兩種語法結構介紹。ISO標準語法:Declare cursor_name Insensitive Scroll Cursor For selec

25、t_statement For Read Only| Update Of column_name ,.n 10.2 游標游標An Introduction to Database Systems28/55說明:(1)cursor_name:所定義的 Transact-SQL 服務器游標的名稱。cursor_name 必須符合標識符規(guī)則。(2)Insensitive:使用Insensitive定義的游標,把提取出來的數(shù)據(jù)存入一個在tempdb數(shù)據(jù)庫中創(chuàng)建的臨時表里。任何通過這個游標進行的操作,都在這個臨時表中進行,所有對基本表的更改都不會在用游標進行的操作中體現(xiàn)出來。若不用Insensitive

26、關鍵字,則所有用戶對基本表的刪除和更新則會反映在后面的提取操作中。(3)Scroll:指定以下提取方式均可用:(4)First:提取第一行數(shù)據(jù)。(5)Last:提取最后一行數(shù)據(jù)。10.2 游標游標An Introduction to Database Systems29/55(6)Prior:提取前一行數(shù)據(jù)。(7)Next:提取后一行數(shù)據(jù)。(8)Relative:按相對位置提取數(shù)據(jù)。(9)Absolute:按絕對位置提取數(shù)據(jù)。如果聲明游標時沒有使用Scroll關鍵字,則所聲明的游標只具有默認的Next功能。(10)select_statement:定義游標結果集的標準 Select 語句。在游

27、標聲明的 select_statement 中不允許使用關鍵字 Compute、Compute by、For Browse 和 Into。(11)Read Only:定義只讀游標,禁止通過游標修改數(shù)據(jù)。在 Update 或 Delete語句的 Where Current Of 子句中不能引用該游標。(12)Update Of column_name ,.n :定義游標中可更新的列。如果指定了 Of column_name ,.n,則只允許修改所列出的列。如果指定了 Update,但未指定列的列表,則可以更新所有列。10.2 游標游標An Introduction to Database Sys

28、tems30/55【例題10-2】使用本教材提供“教學管理數(shù)據(jù)庫”,為“學生基本信息表”聲明一個Update游標。 DECLARE student_cursor SCROLL CURSORFORSELECT * FROM 學生基本信息表FOR UPDATEAn Introduction to Database Systems31/552打開游標 游標聲明之后,在操作之前必須打開它。打開游標的語法如下: Open Global cursor_name | cursor_variable_name 10.2 游標游標An Introduction to Database Systems32/55說

29、明:(1)Global:指定 cursor_name 是全局游標。(2)cursor_name:已聲明的游標的名稱。如果全局游標和局部游標都使用 cursor_name 作為其名稱,那么如果指定了 Global,則 cursor_name 指的是全局游標;否則 cursor_name 指的是局部游標。(3)cursor_variable_name:游標變量的名稱,該變量引用一個游標。當執(zhí)行打開游標的語句時,服務器將執(zhí)行聲明游標時使用的Select語句。如果使用了Incensitive或Static關鍵字,則服務器會在tempdb中建立一個臨時表,存放游標將要進行操作的結果集的副本。10.2 游

30、標游標An Introduction to Database Systems33/55【例題10-3】使用本教材提供“教學管理數(shù)據(jù)庫”,打開“學生基本信息表”的游標“student_cursor”。 open student_cursorAn Introduction to Database Systems34/553提取數(shù)據(jù) 在利用Open語句打開游標并從數(shù)據(jù)庫中執(zhí)行了查詢之后,就可以利用Fetch語句從查詢結果集中提取數(shù)據(jù)了。使用Fetch語句一次可以提取一條記錄,具體的語法格式如下:Fetch Next | Prior | First | Last| Absolute n | nvar|

31、 Relative n | nvar From Global cursor_name | cursor_variable_name Into variable_name ,.n 10.2 游標游標An Introduction to Database Systems35/55說明:(1)Fetch First:提取結果集中的第一行。(2)Fetch Prior:提取上一個提取行的前面的一行,如果Fetch Prior為對游標的第一次提取操作,則沒有行返回并且游標置于第一行之前。(3)Fetch Next:提取上一個提取行的后面的一行,如果Fetch Next為對游標的第一次提取操作,則返回結果

32、集中的第一行。(4)Fetch Last:提取結果集中的最后一行。10.2 游標游標An Introduction to Database Systems36/55 (5)Fetch Absolute n | nvar:如果 n 或 nvar 為正,則返回從游標頭開始向后的第 n 行,并將返回行變成新的當前行。如果 n 或 nvar 為負,則返回從游標末尾開始向前的第 n 行,并將返回行變成新的當前行。如果 n 或 nvar 為 0,則不返回行。n 必須是整數(shù)常量,并且 nvar 的數(shù)據(jù)類型必須為 smallint、tinyint 或 int。 10.2 游標游標An Introduction

33、 to Database Systems37/55(6)Fetch Relative n | nvar:如果 n 或 nvar 為正,則返回從當前行開始向后的第 n 行,并將返回行變成新的當前行。如果 n 或 nvar 為負,則返回從當前行開始向前的第 n 行,并將返回行變成新的當前行。如果 n 或 nvar 為 0,則返回當前行。在對游標進行第一次提取時,如果在將 n 或 nvar 設置為負數(shù)或 0 的情況下指定 Fetch Relative,則不返回行。n 必須是整數(shù)常量,nvar 的數(shù)據(jù)類型必須為 smallint、tinyint 或 int。(7)Global:指定 cursor_na

34、me 是全局游標。10.2 游標游標An Introduction to Database Systems38/55(8)cursor_name:已聲明的游標的名稱。如果全局游標和局部游標都使用 cursor_name 作為其名稱,那么如果指定了 Global,則 cursor_name 指的是全局游標;否則 cursor_name 指的是局部游標。(9)cursor_variable_name:游標變量的名稱,該變量引用一個游標。(10)Into variable_name ,.n :將提取的結果存放到局部變量中。變量的數(shù)量、排列順序和相應的數(shù)據(jù)類型必須和聲明游標時使用的select語句中引

35、用的數(shù)據(jù)列的數(shù)量、排列順序和數(shù)據(jù)類型保持一致。10.2 游標游標An Introduction to Database Systems39/55 通過檢測全局變量Fetch_Status的值,可以獲得Fetch語句的狀態(tài)信息,該狀態(tài)信息用于判斷該Fetch語句返回數(shù)據(jù)的有效性。當執(zhí)行一條Fetch語句之后,F(xiàn)etch_Status可能出現(xiàn)三種值:0:Fetch語句成功。-1:Fetch 語句失敗或行不在結果集中。-2:提取的行不存在。 10.2 游標游標An Introduction to Database Systems40/55【例題10-4】使用本教材提供“教學管理數(shù)據(jù)庫”,打開“學生基

36、本信息表”的游標“ student_cursor”,提取結果集中的第一行。 declare name varchar(20)/*定義一個變量,存放提取的結果*/open student_cursorfetch next from student_cursorinto nameprint nameAn Introduction to Database Systems41/55圖10-2 例10-4執(zhí)行過程 An Introduction to Database Systems42/5510.2 游標游標4利用游標更新和刪除數(shù)據(jù) 如果游標聲明為可更新游標,則定位在可更新游標中的某行上時,可以執(zhí)行更

37、新或刪除操作,這些操作是針對用于在游標中生成當前行的基表行的,稱之為“定位更新”。利用游標更新和刪除數(shù)據(jù)的步驟為:(1)Declare語句聲明游標;(2)Open語句打開游標;(3)Fetch語句定位到某一行;(4)用 Where Current Of 子句執(zhí)行 Update 或 Delete 語句。 An Introduction to Database Systems43/55【例題10-5】使用可更新游標student_Cursor對數(shù)據(jù)庫中“學生成績表”中成績列定位到某一行后,Update當前行的操作。 UPDATE 學生成績表 SET 成績=100 WHERE CURRENT of

38、student_Cursor; Delete當前行的操作如下: DELETE FROM學生成績表WHERE CURRENT OF student_Cursor An Introduction to Database Systems44/555關閉游標 游標打開之后,服務器會專門為游標開辟一定的內存空間存放游標操作的數(shù)據(jù)結果集,同時使用游標也會對某些數(shù)據(jù)進行封鎖。所以,在長時間不用游標的時候,一定要關閉游標,通知服務器釋放游標所占用的資源。游標關閉之后,可以再次打開,在一個處理過程中,可以多次打開和關閉游標。關閉游標的語法格式為: Close Global cursor_name | curso

39、r_variable_name10.2 游標游標An Introduction to Database Systems45/55(1)Global:指定 cursor_name 是全局游標。(2)cursor_name:已聲明的游標的名稱。如果全局游標和局部游標都使用 cursor_name 作為其名稱,那么如果指定了 Global,則 cursor_name 指的是全局游標;否則 cursor_name 指的是局部游標。(3)cursor_variable_name:游標變量的名稱,該變量引用一個游標。例如:close student_cursor 。10.2 游標游標An Introduc

40、tion to Database Systems46/556釋放游標 使用完游標之后應該將游標釋放,以釋放被游標占用的資源。釋放游標的語法結構如下: Deallocate Global cursor_name | cursor_variable_name10.2 游標游標An Introduction to Database Systems47/55(1)Global:指定 cursor_name 是全局游標。(2)cursor_name:已聲明的游標的名稱。如果全局游標和局部游標都使用 cursor_name 作為其名稱,那么如果指定了 Global,則 cursor_name 指的是全局游

41、標;否則 cursor_name 指的是局部游標。(3)cursor_variable_name:游標變量的名稱,該變量引用一個游標。 游標釋放之后,如果要重新使用游標,必須重新執(zhí)行聲明游標的語句。例如:deallocate student_cursor 。10.2 游標游標An Introduction to Database Systems48/5510.3 C#數(shù)據(jù)庫事務數(shù)據(jù)庫事務 1SQL語句操作事務 打開SQL Server2008的Microsoft SQL Server Management Studio,選擇mydb數(shù)據(jù)庫,如下所示的SQL代碼定義了一個事務,并且命名為“MyTransaction”。這里用到了數(shù)據(jù)庫mydb,提交事務后,將為所有myBalance增加 10%。 An Introduction to Database Systems49/55/事務操作 private void button_Tran_Click(object sender, EventArgs e) sql = DECLARE TranName VARCHAR(20) + SELECT TranName = MyTransaction + BEGIN TRANSACTION TranName GOUSE mydb + GO + UPDATE myTable + SET roy

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論