sql事務和儲存過程

2022-07-12 12:18:11 字數 3247 閱讀 2205

一、sql事務

1.什麼是事務:事務是乙個不可分割的工作邏輯單元,在資料庫系統上執行併發操作時事務是做為最小的控制單元來使用的。他包含的所有資料庫操作命令作為乙個整體一起向系提交或撤消,這一組資料庫操作命令要麼都執行,要麼都不執行。

2.事務的語句

開始事物:begin transaction

提交事物:commit transaction

回滾事務:rollback transaction

3.事務的4個特性

①原子性(atomicity):事務中的所有元素作為乙個整體提交或回滾,是不可折分的,事務是乙個完整的操作。

②一致性(consistemcy):事物完成時,資料必須是一致的,也就是說,和事物開始之前,資料儲存中的資料處於一致狀態。保證資料的無損。

③隔離性(isolation):對資料進行修改的多個事務是彼此隔離的。這表明事務必須是獨立的,不應該以任何方式來影響其他事務。

④永續性(durability):事務完成之後,它對於系統的影響是永久的,該修改即使出現系統故障也將一直保留,真實的修改了資料庫

4.事務的分類.

按事務的啟動與執行方式,可以將事務分為3類:

①顯示事務 :也稱之為使用者定義或使用者指定的事務,即可以顯式地定義啟動和結束的事務。分布式事務屬於顯示事務

②自動提交事務:預設事務管理模式。如果乙個語句成功地完成,則提交該語句;如果遇到錯誤,則回滾該語句。

③隱性事務:當連線以此模式進行操作時,sql將在提交或回滾當前事務後自動啟動新事務。無須描述事務的開始,只需提交或回滾每個事務。它生成連續的事務鏈。

5.例項

begin transaction--開始事務

declare @errorsun int --定義錯誤計數器

set @errorsun=0 --沒錯為0

update a set id=232 where a=1 --事務操作sql語句

set @errorsun=@errorsun+@@error --累計是否有錯

update aa set id=2 where a=1 --事務操作sql語句

set @errorsun=@errorsun+@@error --累計是否有錯

if @errorsun<>0

begin

print '有錯誤,回滾'

rollback transaction--事務回滾語句

endelse

begin

print '成功,提交'

commit transaction--事務提交語句

end6、不能用於事務的操作

建立資料庫 create database

修改資料庫 alter database

刪除資料庫 drop database

恢復資料庫 restore database

載入資料庫 load database

備份日誌檔案 backup log

恢復日誌檔案 restore log

更新統計資料 update statitics

授權操作              grant

複製事務日誌 dump tran

磁碟初始化           disk init

更新使用sp_configure後的系統配置           reconfigure

二、儲存過程

1.儲存過程的優勢

(1) 能實現模組化程式設計。儲存過程是根據實際功能的需要建立的乙個程式模組,並被儲存在資料庫中。以後使用者要完成該功能,只要在程式中直接呼叫該儲存過程即可,而無需再編寫重複的程式**。儲存過程可由資料庫程式設計方面的專門人員建立,並可獨立於程式源**而進行修改和擴充套件。

(2) 使用儲存過程可以提高執行效率。當客戶程式需要訪問伺服器上的資料時,一般要經過5個步驟:

● 查詢語句被傳送到伺服器;

● 伺服器編譯t-sql語句;

● 優化產生查詢執行計畫;

● 資料庫引擎執行查詢;

● 執行結果發回客戶程式。

如果執行儲存在客戶端本地的t-sql程式,那麼每次執行該程式時,對於程式中的每一條語句都要經過以上5個步驟。而儲存過程在建立時就被編譯和優化,當儲存過程第一次被執行時,sql server為其產生查詢計畫並將其儲存在記憶體中,這樣以後在呼叫該儲存過程時就不必再進行編譯,即以上5個步驟中的第2步和第3步就被省略了,這能大大改善系統的效能。

(3) 減少網路流量。乙個需要數百行t-sql**的操作,如果將其建立成儲存過程,那麼使用一條呼叫儲存過程的語句就可完成該操作。這樣就可避免在網路上傳送數百行**,從而減少了網路負荷。

(4) 可作為安全機制使用。管理員可以不授予使用者訪問儲存過程中涉及的表的許可權,而只授予執行儲存過程的許可權。這樣,既可以保證使用者通過儲存過程操縱資料庫中的資料,又可以保證使用者不能直接訪問儲存過程中涉及的表。使用者通過儲存過程來訪問表,所能進行的操作是有限制的,從而保證了表中資料的安全性。

2.儲存過程的型別

(1) 系統儲存過程

在sql server中的許多管理工作是通過執行系統儲存過程來完成的。系統儲存過程建立和儲存在master資料庫中,都以sp_為名稱的字首。系統儲存過程是sql server系統自帶的,具有執行系統儲存過程許可權的使用者,可在master資料庫之外直接呼叫。一般情況下,系統儲存過程執行成功返回0值,若有錯誤發生返回非0值。

(2) 擴充套件儲存過程

擴充套件儲存過程是以動態鏈結庫(dll)形式存在的外部程式。sql server自身帶了大量的擴充套件儲存過程安裝在master資料庫中,擴充套件儲存過程與普通儲存過程執行方法相同。

若擴充套件儲存過程的字首為sp_,則該擴充套件儲存過程在master資料庫之外也可直接呼叫;否則,必須在擴充套件儲存過程前面加上「master.dbo.」字首。開發人員可以使用其他程式語言來建立擴充套件儲存過程,編寫好擴充套件儲存過程後,可由sysadmin伺服器角色的成員在 sql server 中註冊該擴充套件儲存過程,然後授予其他使用者執行該過程的許可權。擴充套件儲存過程只能新增到 master 資料庫中,利用擴充套件儲存過程可以擴充套件sql server的功能。

(3) 使用者儲存過程

使用者儲存過程是由使用者根據實際問題的需要所建立的儲存過程。固定伺服器角色sysadmin 的成員可根據實際需要在master資料庫中建立使用者儲存過程,若使用sp_做儲存過程的字首,則該儲存過程在任何位置均可直接呼叫,否則,必須在該儲存過程前面加上「master.dbo.」字首。對於在使用者資料庫中建立的儲存過程,最好不要使用sp_作為其名稱的字首,否則如果該儲存過程與系統儲存過程同名,則該儲存過程永遠不會被執行。並且若在該使用者資料庫之外呼叫該儲存過程,也必須在儲存過程名的前面加上「使用者資料庫名.所有者名.」字首才能找著、執行該儲存過程。

sql事務和儲存過程

一 sql事務 1.什麼是事務 事務是乙個不可分割的工作邏輯單元,在資料庫系統上執行併發操作時事務是做為最小的控制單元來使用的。他包含的所有資料庫操作命令作為乙個整體一起向系提交或撤消,這一組資料庫操作命令要麼都執行,要麼都不執行。2.事務的語句 開始事物 begin transaction 提交事...

Sql 儲存過程 事務

alter procedure dbo usp pe delworklogbill id varchar 50 companycode varchar 50 asdeclare errno int set errno 0 begin tran 開始執行事務 delete from opeworklo...

sql儲存過程和事務的應用

在去年,學習資料庫的時候就學過儲存過程了。一直都只知道一些理論,卻不知道如何去使用。時隔一年,終於找到如何使用儲存過程了。在機房收費系統中,有些操作,需要多次執行sql語句,多次執行完成才算是完成這個事件流。但是如果其中有乙個環節出了錯誤,那麼沒出錯誤的那些操作是不是就多餘了。執行儲存過程,就是執行...