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