數(shù)據(jù)庫(kù)中的事務(wù)、存儲(chǔ)過(guò)程和觸發(fā)器的簡(jiǎn)單使用
什么是事務(wù)(Transaction)
指訪問并可能更新數(shù)據(jù)庫(kù)中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(unit)--也就是由多個(gè)sql語(yǔ)句組成,必須作為一個(gè)整體執(zhí)行
這些sql語(yǔ)句作為一個(gè)整體一起向系統(tǒng)提交,要么都執(zhí)行、要么都不執(zhí)行
語(yǔ)法步驟:
開始事務(wù):BEGIN TRANSACTION
事務(wù)提交:COMMIT TRANSACTION
事務(wù)回滾:ROLLBACK TRANSACTION
判斷某條語(yǔ)句執(zhí)行是否出錯(cuò):
全局變量@@ERROR;
@@ERROR只能判斷當(dāng)前一條T-SQL語(yǔ)句執(zhí)行是否有錯(cuò),為了判斷事務(wù)中所有T-SQL語(yǔ)句是否有錯(cuò),我們需要對(duì)錯(cuò)誤進(jìn)行累計(jì);
例:SET @errorSum=@errorSum+@@error
存儲(chǔ)過(guò)程---就像數(shù)據(jù)庫(kù)中運(yùn)行方法(函數(shù))
和C#里的方法一樣,由存儲(chǔ)過(guò)程名/存儲(chǔ)過(guò)程參數(shù)組成/可以有返回結(jié)果。
前面學(xué)的if else/while/變量 等,都可以在存儲(chǔ)過(guò)程中使用
優(yōu)點(diǎn):
執(zhí)行速度更快
允許模塊化程序設(shè)計(jì)
提高系統(tǒng)安全性
減少網(wǎng)絡(luò)流通量
系統(tǒng)存儲(chǔ)過(guò)程
由系統(tǒng)定義,存放在master數(shù)據(jù)庫(kù)中
名稱以“sp_”開頭或”xp_”開頭
自定義存儲(chǔ)過(guò)程
由用戶在自己的數(shù)據(jù)庫(kù)中創(chuàng)建的存儲(chǔ)過(guò)程
系統(tǒng)存儲(chǔ)過(guò)程
說(shuō)明
sp_databases
列出服務(wù)器上的所有數(shù)據(jù)庫(kù)。
sp_helpdb
報(bào)告有關(guān)指定數(shù)據(jù)庫(kù)或所有數(shù)據(jù)庫(kù)的信息
sp_renamedb
更改數(shù)據(jù)庫(kù)的名稱
sp_tables
返回當(dāng)前環(huán)境下可查詢的對(duì)象的列表
sp_columns
回某個(gè)表列的信息
sp_help
查看某個(gè)表的所有信息
sp_helpconstraint
查看某個(gè)表的約束
sp_helpindex
查看某個(gè)表的索引
sp_stored_procedures
列出當(dāng)前環(huán)境中的所有存儲(chǔ)過(guò)程。 sp_password
添加或修改登錄帳戶的密碼。
sp_helptext
顯示默認(rèn)值、未加密的存儲(chǔ)過(guò)程、用戶定義的存儲(chǔ)過(guò)程、觸發(fā)器或視圖的實(shí)際文本。
定義存儲(chǔ)過(guò)程的語(yǔ)法
CREATE PROC[EDURE] 存儲(chǔ)過(guò)程名
@參數(shù) 數(shù)據(jù)類型 = 默認(rèn)值 OUTPUT,
@參數(shù)n 數(shù)據(jù)類型 = 默認(rèn)值 OUTPUT
AS
SQL語(yǔ)句
參數(shù)說(shuō)明:
參數(shù)可選
參數(shù)分為輸入?yún)?shù)、輸出參數(shù)
輸入?yún)?shù)允許有默認(rèn)值
EXEC 過(guò)程名 [參數(shù)]
觸發(fā)器是一種特殊類型的存儲(chǔ)過(guò)程,它不同于前面介紹過(guò)的一般的存儲(chǔ)過(guò)程。
一般的存儲(chǔ)過(guò)程通過(guò)存儲(chǔ)過(guò)程名稱被直接調(diào)用,而觸發(fā)器主要是通過(guò)事件進(jìn)行觸發(fā)而被執(zhí)行。
觸發(fā)器是一個(gè)功能強(qiáng)大的工具,在表中數(shù)據(jù)發(fā)生變化時(shí)自動(dòng)強(qiáng)制執(zhí)行。觸發(fā)器可以用于SQL Server約束、默認(rèn)值和規(guī)則的完整性檢查,還可以完成難以用普通約束實(shí)現(xiàn)的復(fù)雜功能。
那究竟何為觸發(fā)器?在SQL Server里面也就是對(duì)某一個(gè)表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個(gè)特殊的存儲(chǔ)過(guò)程。
常見的觸發(fā)器有三種:分別應(yīng)用于Insert , Update , Delete 事件
常用語(yǔ)法
CREATE TRIGGER triggerName ON Table for UPDATE|INSERT|DELETE AS begin … end |
觸發(fā)器-更新
CREATE TRIGGER testForFun ON dbo.Category for UPDATE AS begin select * from book end update Category set c_name = 'Android2' where c_id=3 |
觸發(fā)器-刪除
CREATE TRIGGER testForDel ON dbo.Category for delete AS begin select * from book end delete Category set c_name = 'Android2' where c_id=3 |
posted on 2014-03-27 17:06 順其自然EVO 閱讀(472) 評(píng)論(0) 編輯 收藏 所屬分類: 數(shù)據(jù)庫(kù)