- NIIT認證Java面試題及答案 推薦度:
- 相關(guān)推薦
2016年NIIT認證面試題精選
什么是事務?四大事務特性是什么?(ACID)
事務是單個的工作單元。如果某一事務成功,則在該事務中進行的所有數(shù)據(jù)修改均會提交,成為數(shù)據(jù)庫中的永久組成部分。如果事務遇到錯誤且必須取消或回滾,則所有數(shù)據(jù)修改均被清除。
舉個例子,比如你去銀行轉(zhuǎn)帳就是一個事務。轉(zhuǎn)帳可以簡單的分為兩個步驟,一是把錢從你的帳戶中扣除,二是把錢存到你指定轉(zhuǎn)帳的帳戶中。這兩個步驟就是一個事務,必須全部執(zhí)行,或是全部不執(zhí)行。如果從你帳戶扣錢成功,但是轉(zhuǎn)帳失敗,那么你轉(zhuǎn)帳的錢就沒有了;如果是扣錢失敗了,但是轉(zhuǎn)帳成功了,那銀行就虧了。
事務是作為單個邏輯工作單元執(zhí)行的一系列操作。一個邏輯工作單元必須有四個屬性,稱為原子性、一致性、隔離性和持久性 (ACID) 屬性,只有這樣才能成為一個事務。
原子性:事務必須是原子工作單元;對于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。
一致性:事務在完成時,必須使所有的數(shù)據(jù)都保持一致狀態(tài)。在相關(guān)數(shù)據(jù)庫中,所有規(guī)則都必須應用于事務的修改,以保持所有數(shù)據(jù)的完整性。事務結(jié)束時,所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如 B 樹索引或雙向鏈表)都必須是正確的。
隔離:由并發(fā)事務所做的修改必須與任何其他并發(fā)事務所做的修改隔離。事務識別數(shù)據(jù)時數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務修改它之前的狀態(tài),要么是第二個事務修改它之后的狀態(tài),事務不會識別中間狀態(tài)的數(shù)據(jù)。這稱為可串行性,因為它能夠重新裝載起始數(shù)據(jù),并且重播一系列事務,以使數(shù)據(jù)結(jié)束時的狀態(tài)與原始事務執(zhí)行的狀態(tài)相同。
持久性:事務完成之后,它對于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)系統(tǒng)故障也將一直保持。
SQL Server 以下列事務模式運行。
自動提交事務:每條單獨的語句都是一個事務。
顯式事務:每個事務均以 BEGIN TRANSACTION 語句顯式開始,以 COMMIT 或 ROLLBACK 語句顯式結(jié)束。
隱式事務:在前一個事務完成時新事務隱式啟動,但每個事務仍以 COMMIT 或 ROLLBACK 語句顯式完成。
批處理級事務:只能應用于多個活動結(jié)果集 (MARS),在 MARS 會話中啟動的 Transact-SQL 顯式或隱式事務變?yōu)榕幚砑壥聞。當批處理完成時沒有提交或回滾的批處理級事務自動由 SQL Server 進行回滾。
Sql Server中有三種使用事務的方法,分別是Sql語句,SqlTransaction和TransactionScope,下面一節(jié)將分別介紹這三種事務的使用方法。htt
事務(TRANSACTION)是作為單個邏輯工作單元執(zhí)行的一系列操作
q 這些操作作為一個整體一起向系統(tǒng)提交,要么都執(zhí)行、要么都不執(zhí)行
q 事務是一個不可分割的工作邏輯單元
轉(zhuǎn)帳過程就是一個事務。
它需要兩條UPDATE語句來完成,這兩條語句是一個整體,如果其中任一條出現(xiàn)錯誤,則整個轉(zhuǎn)帳業(yè)務也應取消,兩個帳戶中的余額應恢復到原來的數(shù)據(jù),從而確保轉(zhuǎn)帳前和轉(zhuǎn)帳后的余額不變,即都是1001元。
事務的特性
事務必須具備以下四個屬性,簡稱ACID屬性:
•q原子性(Atomicity):事務是一個完整的操作。事務的各步操作是不可分的(原子的);要么都執(zhí)行,要么都不執(zhí)行
•q一致性(Consistency):當事務完成時,數(shù)據(jù)必須處于一致狀態(tài)
•q隔離性(Isolation):對數(shù)據(jù)進行修改的所有并發(fā)事務是彼此隔離的,這表明事務必須是獨立的,它不應以任何方式依賴于或影響其他事務
•q永久性(Durability):事務完成后,它對數(shù)據(jù)庫的修改被永久保持,事務日志能夠保持事務的永久性
如何創(chuàng)建事務
q T-SQL使用下列語句來管理事務:
q 開始事務:BEGIN TRANSACTION
q 提交事務:COMMIT TRANSACTION
q 回滾(撤銷)事務:ROLLBACK TRANSACTION
一旦事務提交或回滾,則事務結(jié)束。
q 判斷某條語句執(zhí)行是否出錯:
q 使用全局變量@@ERROR;
q @@ERROR只能判斷當前一條T-SQL語句執(zhí)行是否有錯,為了判斷事務中所有T-SQL語句是否有錯,我們需要對錯誤進行累計;
如: SET @errorSum=@errorSum+@@error
了解事務的分類:
q 顯示事務:用BEGIN TRANSACTION明確指定事務的開始,這是最常用的事務類型
q 隱性事務:通過設置SET IMPLICIT_TRANSACTIONS ON 語句,將隱性事務模式設置為打開,下一個語句自動啟動一個新事務。當該事務完成時,再下一個 T-SQL 語句又將啟動一個新事務
q 自動提交事務:這是 SQL Server 的默認模式,它將每條單獨的 T-SQL 語句視為一個事務,如果成功執(zhí)行,則自動提交;如果錯誤,則自動回滾
q 使用事務解決銀行轉(zhuǎn)帳問題
……關(guān)鍵語句講解………
BEGIN TRANSACTION
/*--定義變量,用于累計事務執(zhí)行過程中的錯誤--*/
DECLARE @errorSum INT
SET @errorSum=0 --初始化為0,即無錯誤
/*--轉(zhuǎn)帳:張三的帳戶少1000元,李四的帳戶多1000元*/
UPDATE bank SET currentMoney=currentMoney-1000
WHERE customerName='張三'
SET @errorSum=@errorSum+@@error
UPDATE bank SET currentMoney=currentMoney+1000
WHERE customerName='李四'
SET @errorSum=@errorSum+@@error --累計是否有錯誤
IF @errorSum<>0 --如果有錯誤
BEGIN
print '交易失敗,回滾事務'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
print '交易成功,提交事務,寫入硬盤,永久的保存'
COMMIT TRANSACTION
END
Go
print '查看轉(zhuǎn)帳事務后的余額'
SELECT * FROM bank
GO
【NIIT認證面試題】相關(guān)文章:
NIIT認證Java面試題及答案08-27
NIIT認證簡介08-15
NIIT認證的就業(yè)前景06-26
NIIT教學及認證體系09-16
NIIT認證詳細介紹07-09
關(guān)于NIIT認證的介紹06-16
NIIT認證培訓筆記08-18
2016年NIIT認證模擬試題10-27
NIIT認證面試真題及答案2017年05-11