當前位置:首頁 » 服務存儲 » 存儲過程有原子性嗎
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

存儲過程有原子性嗎

發布時間: 2022-04-16 04:31:05

㈠ 怎麼才能使這個存儲過程具有原子性

一、存儲過程中使用事務的簡單語法在存儲過程中使用事務時非常重要的,使用數據可以保持數據的關聯完整性,在sql server存儲過程中使用事務也很簡單,用一個例子來說明它的語法格式: Create Procere MyProcere ( @Param1 nvarchar(10), @param2 nvarchar(10) ) AS BeginSet NOCOUNT ON; Set XACT_ABORT ON; Begin Tran Delete from table1 where name=』abc』; Insert into table2 values(value1,value2,value3); Commit Tran End說明: 1 、使用存儲過程執行事物,需要開啟XACT_ABORT參數(默認值為Off),將該參數設置為On,表示當執行事務時,如果出錯,會將transcation設置為uncommittable狀態,那麼在語句塊批處理結束後將回滾所有操作;如果該參數設置為Off,表示當執行事務時,如果出錯,出錯的語句將不會執行,其他正確的操作繼續執行。 2、當SET NOCOUNT 為 ON 時,不返回計數(計數表示受 Transact-SQL 語句影響的行數,例如在Sql server查詢分析器中執行一個delete操作後,下方窗口會提示(3)Rows Affected)。當 SET NOCOUNT 為 OFF 時,返回...

㈡ 一個存儲過程中更新多個表可以用一個COMMIT嗎

技術上是可以的,原則建議。

一般情況下事務有原子性,如果要一起執行的語句放在事務中提交,達到這些語句的「同步」,要不都不執行,要不都執行。顯然,這里是可以放在一起的讓其執行的。

但語句中很明顯涉及了更新插入等相關操作,此進需要在事務上加排他鎖,這樣會導致資料庫的並發性下降,所以對於事務我們一般會選用的是執行較快的幾組語句入在一起的。一般事務較為短小,至少執行速 度會很快。

假定,我是說假定,如果 有一個事務需要執行的時間是一天,由於事務中有更新語句,所以事務加了排他鎖,其他事務與程序只有等待。這樣可想你的資料庫不能再接受任何外部的調用了。也就是說如果你的程序執行過長,最好不要使用事務。

所以在事務語句中是不允許進行資料庫的壓縮,創建,等耗時較高的操作的,這是SQL中規定的!

㈢ 關於存儲過程與事務

這兩個概念可以說是兩個范疇的概念,事務是資料庫操作范疇的概念,保證資料庫數據的完整性和一致性;存儲過程是高級程序設計中模塊化設計思想的重要內容。

事務是包含一組修改(插入、更新和刪除)的工作的邏輯單位。事務的操作要麼被保存到資料庫commit,要麼回滾rollback,事務中的所有修改要麼全部提交,要麼什麼也不做,這樣保證了資料庫中數據的完整性和一致性。

資料庫操作中為了完成一個完整的資料庫任務,從而引進高級程序的設計要素。過程就是高級程序設計語言中的模塊概念,將一些內部聯系的命令組成一個個過程,通過參數在過程間傳遞數據來完成一個完整的資料庫任務,這就是模塊化設計思想的重要內容。

有的時候可以把一個過程看作一個事務,但是有的過程運行過程中因為滿足某些條件而從過程中跳出,這時就不能把過程看作事務;反之,一個事務可能是一個過程,也可能一個事務中包含對一個或多個過程的調用。

二者概念所述的范疇不同,在資料庫中,是相互聯系相互區別的;而且兩者都是具體的,不是抽象的,因為都可以拿出一段代碼,說它是事務或是存儲過程。

以上是個人理解,希望對你有所幫助。

㈣ sql server 存儲過程

在執行存儲過程時,我們常遇到執行超時的情況。如果是因為要處理的數據過多,修改流程復雜等原因的話,如以用以下方法解決:在存儲過程的處理工作中加上事務管理:SET TRANSACTION ISOLATION LEVEL REPEATABLE READ --->要這行
BEGIN TRAN /* 這里是程序處理代碼段*/commit transaction
QuitWithRollback:
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRANSACTION
END 以下是事務相關的知識:BEGIN TRANSACTION--開始事務DECLARE @errorSun INT --定義錯誤計數器SET @errorSun=0 --沒錯為0UPDATE 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--事務回滾語句END ELSE BEGIN PRINT '成功,提交'COMMIT TRANSACTION--事務提交語句END1.什麼是事務:事務是一個不可分割的工作邏輯單元,在資料庫系統上執行並發操作時事務是做為最小的控制單元來使用的。他包含的所有資料庫操作命令作為一個整體一起向系提交或撤消,這一組資料庫操作命令要麼都執行,要麼都不執行。2.事務的語句開始事物:BEGIN TRANSACTION 提交事物:COMMIT TRANSACTION 回滾事務:ROLLBACK TRANSACTION3.事務的4個屬性①原子性(Atomicity):事務中的所有元素作為一個整體提交或回滾,事務的個元素是不可分的,事務是一個完整操作。②一致性(Consistemcy):事物完成時,數據必須是一致的,也就是說,和事物開始之前,數據存儲中的數據處於一致狀態。保證數據的無損。③隔離性(Isolation):對數據進行修改的多個事務是彼此隔離的。這表明事務必須是獨立的,不應該以任何方式以來於或影響其他事務。④持久性(Durability):事務完成之後,它對於系統的影響是永久的,該修改即使出現系統故障也將一直保留,真實的修改了資料庫4.事務的保存點 SAVE TRANSACTION 保存點名稱 --自定義保存點的名稱和位置 ROLLBACK TRANSACTION 保存點名稱 --回滾到自定義的保存點 二事例 所謂事務是指一組邏輯操作單元,它使數據從一種狀態變換到另一種狀態。包括四個特性:1、原子性 就是事務應作為一個工作單元,事務處理完成,所有的工作要麼都在資料庫中保存下來,要麼完全回滾,全部不保留2、一致性 事務完成或者撤銷後,都應該處於一致的狀態3、隔離性 多個事務同時進行,它們之間應該互不幹擾.應該防止一個事務處理其他事務也要修改的數據時, 不合理的存取和不完整的讀取數據4、持久性 事務提交以後,所做的工作就被永久的保存下來 示例:創建一個存儲過程,向兩個表中同時插入數據Create proc RegisterUser(@usrName varchar(30),@usrPasswd varchar(30),@age int,@sex varchar(10),@PhoneNum varchar(20),@Address varchar(50) )as beginbegin traninsert into userinfo(userName,userPasswd)values(@usrName,@usrPasswd)if @@error<>0begin rollback tranreturn -1endinsert into userdoc(userName,age,sex,PhoneNumber,Address)values(@Usrname,@age,@sex,@PhoneNum,@Address)if @@error<>0begin rollback tranreturn -1endcommit tranreturn 0end事務的分類按事務的啟動與執行方式,可以將事務分為3類:顯示事務 也稱之為用戶定義或用戶指定的事務,即可以顯式地定義啟動和結束的事務。分布式事務屬於顯示事務自動提交事務默認事務管理模式。如果一個語句成功地完成,則提交該語句;如果遇到錯誤,則回滾該語句。隱性事務當連接以此模式進行操作時,sql將在提交或回滾當前事務後自動啟動新事務。無須描述事務的開始,只需提交或回滾每個事務。它生成連續的事務鏈。一、顯示事務通過begin transacton、commit transaction、commit work、rollback transaction或rollback work等語句完成。1、啟動事務格式:begin tran 事務名或變數 with mark 描述2、結束事務格式:commit tran 事務名或變數 (事務名與begin tran中的事務名一致或commit work 但此沒有參數3、回滾事務 rollback tran 事務名或變數 | savepoint_name | savepoint_variable 或rollback work 說明:清除自事務的起點或到某個保存點所做的所有數據修改4、在事務內設置保存點格式:save tran savepoint_name | savepoint_variable 示例:use bookdbgobegin tran mytraninsert into book values(9,"windows2000',1,22,'出版社')save tran mysavedelete book where book_id=9rollback tran mysavecommit trangoselect * from bookgo可以知道,上面的語句執行後,在book中插入了一筆記錄,而並沒有刪除。因為使用rollback tran mysave 語句將操作回滾到了刪除前的保存點處。5、標記事務格式:with mark 例:使用資料庫標記將日誌恢復到預定義時間點的語句 在事務日誌中置入一個標記。請注意,被標記的事務至少須提交一個更新,以標記該日誌。BEGIN TRAN MyMark WITH MARK UPDATE pubs.dbo.LastLogMark SET MarkTime = GETDATE() COMMIT TRAN MyMark 按照您常用的方法備份事務日誌。BACKUP LOG pubs TO DISK='C:/Backups/Fullbackup.bak' WITH INIT 現在您可以將資料庫恢復至日誌標記點。首先恢復資料庫,並使其為接受日誌恢復做好准備。 RESTORE DATABASE pubs FROM DISK=N'C:/Backups/Fullbackup.bak' WITH NORECOVERY 現在將日誌恢復至包含該標記的時間點,並使其可供使用。請注意,STOPAT在資料庫正在執行大容量日誌時禁止執行。 RESTORE LOG pubs FROM DISK=N'C:/Backups/Logbackup.bak' WITH RECOVERY, STOPAT='02/11/2002 17:35:00'5、不能用於事務的操作創建資料庫 create database 修改資料庫 alter database 刪除資料庫 drop database 恢復資料庫 restore database 載入資料庫 load database 備份日誌文件 backup log 恢復日誌文件 restore log 更新統計數據 update statitics 授權操作 grant 復制事務日誌 mp tran 磁碟初始化 disk init 更新使用sp_configure後的系統配置 reconfigure二、自動提交事務 sql連接在begin tran 語句啟動顯式事務,或隱性事務模式設置為打開之前,將以自動提交模式進行操作。當提交或回滾顯式事務,或者關閉隱性事務模式時,將返回到自動提交模式。示例: 由於編譯錯誤,使得三個insert都沒執行use testgocreate table testback(cola int primary key ,colb char(3))goinsert into testback values(1,'aaa')insert into testback values(2,'bbb')insert into testback value(3,'ccc')goselect * from testbackgo 沒有任何結果返回三、隱式事務通過 API 函數或 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 語句,將隱性事務模式設置為打開。下一個語句自動啟動一個新事務。當該事務完成時,再下一個 Transact-SQL 語句又將啟動一個新事務。當有大量的DDL 和DML命令執行時會自動開始,並一直保持到用戶明確提交為止,切換隱式事務可以用SET IMPLICIT_TRANSACTIONS 為連接設置隱性事務模式.當設置為 ON 時,SET IMPLICIT_TRANSACTIONS 將連接設置為隱性事務模式。當設置為 OFF 時,則使連接返回到自動提交事務模式 語句包括: alter table insert open create delete revoke drop select fetch truncate table grant update 示例: 下面使用顯式與隱式事務。它使用@@tracount函數演示打開的事務與關閉的事務:use testgoset nocount oncreate table t1(a int)goinsert into t1 values(1)goprint '使用顯式事務'begin traninsert into t1 values(2)print '事務外的事務數目:'+cast(@@trancount as char(5))commint tranprint '事務外的事務數目:'+cast(@@trancount as char(5))goprintgoset implicit_transactions on go print '使用隱式事務'goinsert into t1 values*4)print'事務內的事務數目:'+cast(@@trancount as char(5))commint tran print'事務外的事務數目:'+cast(@@trancount as char(5))go執行結果: 使用顯示事務事務內的事務數目:2 事務外的事務數目:1 使用隱式事務事務內的事務數目:1 事務外的事務數目:0四、分布式事務跨越兩個或多個資料庫的單個sql server中的事務就是分布式事務。與本地事務區別:必須由事務管理器管理,以盡量避免出現因網路故障而導致一個事務由某些資源管理器成功提交,但由另一些資源管理器回滾的情況。 sql server 可以由DTc microsoft distributed transaction coordinator 來支持處理分布式事務,可以使用 BEgin distributed transaction 命令啟動一個分布式事務處理 分二階段:A 准備階段 B 提交階段執行教程:1、sql 腳本或應用程序連接執行啟動分布式事務的sql語句2、執行該語句的sql在為事務中的主控伺服器3、腳本或應用程序對鏈接的伺服器執行分布式查詢,或對遠程伺服器執行遠程存儲過程。4、當執行了分布式查詢或遠程過程調用後,主控伺服器將自動調用msdtc以便登記分布式事務中鏈接的伺服器和遠程伺服器5、當腳本或應用程序發出commit或rollback語句時,主控sql將調用msdtc管理兩階段提交過程,或者通知鏈接的伺服器和遠程伺服器回滾其事務。

㈤ MySql 的存儲過程和函數鎖定問題。

沒必要這樣加鎖吧,存儲過程本身就是原子性的。
如果非要這樣,可以建一個表,一個標志欄位,先檢查該欄位是否為0,0代表沒加鎖,然後函數開始時把它設為1,完成後設回0。

㈥ SQL的存儲過程和事務這兩者一般在什麼情況下使用

存儲過程(主要有插入記錄、刪除記錄、修改記錄等)主要用於在程序中調用,這程調用在網路應用程序中可以減少網路傳輸流量,提高程序執行效率。
以下是我以前在網上找的:
事務有四個特性
事務的原子性、一致性、獨立性及持久性
事務的原子性是指一個事務要麼全部執行,要麼不執行
事務的一致性是指事務的運行並不改變資料庫中數據的一致性.
事務的獨立性是指兩個以上的事務不會出現交錯執行的狀態.
事務的持久性是指事務運行成功以後,就系統的更新是永久的.不會無

㈦ sql建立存儲過程的作用是什麼

就是把一些數據處理和邏輯性的問題作為一段程序放到資料庫端來處理,這樣處理的可以提高效率,不用每次來處理都要編譯了,也提高了原子性,安全性和事務一致性。

㈧ 業務檔案包括哪些

檔案工作,有狹義解釋和廣義解釋之分。從狹義上說,檔案工作是指管理檔案和提供檔案信息為各項社會實踐服務的一項專門業務。從廣義上說,包括檔案事業管理工作、檔案室工作、檔案館工作、檔案專業教育、檔案科學技術研究、檔案宣傳出版、檔案國際交往活動等。
(1)檔案的收集。是檔案室和檔案館接收和徵集檔案的總稱。包括檔案室對本單位歸檔案卷的接收,檔案館對現行機關或撤銷機關移交檔案的接收、對社會人士捐贈檔案的接收、對分散在社會上的珍貴檔案的徵集。檔案收集的任務,是解決檔案分散狀況與保管、利用檔案要求合理集中的矛盾,只有「化分散為集中」,才便於保管和利用。
(2)檔案的整理。是將零散文件分門別類地組成檔案有機體的一項工作。包括分類、立卷、卷內文件排列、案卷封面的編制、案卷的排列、案卷目錄的編制等一系列工作程序。檔案整理的任務,是解決檔案零散狀態與保管、利用檔案要求系統化的矛盾,只有「化零散為系統」,使檔案由無序狀態轉化為有序狀態,才便於保管和利用。
(3)檔案的鑒定。指檔案保存價值的鑒定,是鑒別檔案價值的大小、確定檔案保管期限、決定檔案保存與銷毀的一項工作。檔案鑒定的任務,是解決檔案的量大質雜與保管、利用檔案要求優質化的矛盾,只有「化質雜為優質」,淘汰檔案中的無用部分,存留其有用部分,才便於保管利用。
(4)檔案的保管。是保護檔案的安全、延長檔案壽命的一項工作。包括檔案保護技術工作和庫房管理工作。檔案保管的任務,是解決檔案的易損性與社會要求長遠保管和利用檔案的矛盾,只有最大限度地增長檔案原件的壽命,或者通過縮微復制保護檔案信息,使之久傳,才能保證社會長遠利用。
(5)檔案的編目。又稱檔案檢索。是對檔案內容和形式進行分析、選擇、濃縮和記錄,並按照一定次序編排成為各種目錄的工作過程。包括館藏目錄、檢索性目錄和介紹性目錄的編制。編目工作的任務,是解決檔案數量龐大、內容復雜和利用者對檔案信息特定需求之間的矛盾。各種檔案目錄可幫助利用者了解館藏檔案的內容和成分,檢索到所需要的檔案信息,也用於檔案館(室)的檔案管理。
(6)檔案的編研。指檔案館(室)的編輯與研究工作。包括編輯檔案文獻匯編、編寫綜合參考資料以及參加編史修志等。其主要任務是:按照一定的選題,將重要的檔案編輯成為文獻出版物,如檔案史料匯編或叢編,重要文件匯編或政策法令匯編,以及科學技術資料匯編等;或者將檔案信息濃縮化、系統化、編成大事記、組織沿革、基礎數字匯編、專題概要等,便於不同利用對象的利用。
(7)檔案的提供利用。亦稱檔案信息的輸出。是通過多種信息傳輸渠道和媒介,將檔案信息傳遞給利用者的工作過程。它是檔案工作為各項社會實踐服務的直接體現,它把檔案的作用由可能性變成現實性,通過它可以把檔案工作搞活,把檔案這種「死材料」變成「活材料」,在各項社會實踐中發揮作用。
(8)檔案的統計。它以表格數字形式全面地反映檔案、檔案工作和檔案事業狀況。包括檔案的收進、移出、整理、鑒定、保管、利用情況,以及檔案機構、人員、經費、設備的登記和統計。檔案統計是取得反饋信息、對檔案工作進行監督的重要手段之一,是檔案部門了解情況、總結經驗、進行決策、制訂計劃的依據。

㈨ 一些SQL的試題

1.應用程序
2.實體完整性
3.distince
4.
5.create Nonclustered index IDX_authors on authors(州名列,城市名列)
6.創建表
7.select 列名 from 表名
8.sum()
9.top
10.alter procere
11.ltrim()
12.declare @變數名 數據類型
13.where
14.from
15.order by
16.cast(表達式 as 數據類型)
17.count()
18.drop procere 存儲過程名
19.創建資料庫
20.價格大於15美元的所有數據
21.資料庫
22.rollback
23.
24.服務管理器
25.
26.數據冗餘(備份)
27.3
28.資料庫
29.應用程序
30.drop table
33.操作系統
許可權
1.
2.是並發控制的單位,是用戶定義的一個操作序列,具有原子性,一致性,隔離性,持續性四個特性。
3.共享鎖(S鎖):如果事務T對數據A加上共享鎖後,則其他事務只能對A再加共享鎖,不能加排他鎖.
獲准共享鎖的事務只能讀數據,不能修改數據。
4.
5.
1.存儲過程可以使得程序執行效率更高、安全性更好,因為過程建立之後 已經編譯並且儲存到資料庫,直接寫sql就需要先分析再執行因此過程效率更高,直接寫sql語句會帶來安全性問題,如:sql注入
2.建立過程不會很耗系統資源,因為過程只是在調用才執行。
6.聚簇索引是一種對磁碟上實際數據重新組織以按指定的一個或多個列的值排序。
7.
8.是並發控制的單位,是用戶定義的一個操作序列,具有原子性,一致性,隔離性,持續性四個特性。
BEGIN TRAN [Tran_name]開始事務
COMMIT TRAN [Tran_name]事務完成提交事務
9.存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化後存儲在資料庫伺服器中,應用程序使用時只要調用即可。
10.增量備份:是針對於上一次備份(無論是哪種備份):備份上一次備份後,所有發生變化的文件。
12.原子性,要麼都做,要麼不做。
13.排它鎖若事務T對數據對象A加上X鎖,則只允許T讀取和修改A,其它任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖。
它防止任何其它事務獲取資源上的鎖,直到在事務的末尾將資源上的原始鎖釋放為止。
14.分布式資料庫系統通常使用較小的計算機系統,每台計算機可單獨放在一個地方,每台計算機中都有DBMS的一份完整拷貝副本,並具有自己局部的資料庫,位於不同地點的許多計算機通過網路互相連接,共同組成一個完整的、全局的大型資料庫。
15.
17同2,18同8
19.DBMS資料庫管理系統,DBA資料庫管理員
20.1對1,一個學生對應一個學號
1對多 一個學生對應多門功課
多對多 商品與廠商
(備註:只能做這么多了,很長時間沒看書了,有時間可以看看<資料庫系統概論>薩師煊 王珊 高等教育出版社,很不錯的一本書哦。上有你要的答案,特別是簡答題。)
21.
22.資料庫完整性,對資料庫提出的某種約束條件或規則。
分三種:實體完整性,參照完整性,用戶自定義完整性
23.
24.原則如下:
●在經常進行連接,但是沒有指定為外鍵的列上建立索引,而不經常連接的欄位則由優化器自動生成索引。
●在頻繁進行排序或分組(即進行group by或order by操作)的列上建立索引。
●在條件表達式中經常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引。比如在雇員表的「性別」列上只有「男」與「女」兩個不同值,因此就無必要建立索引。如果建立索引不但不會提高查詢效率,反而會嚴重降低更新速度。
●如果待排序的列有多個,可以在這些列上建立復合索引(compound index)。

26。聚集索引確定表中數據的物理順序。由於聚集索引規定數據在表中的物理存儲順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引)
非聚集索引一種索引,該索引中索引的邏輯順序與磁碟上行的物理存儲順序不同。一個表可以有多個聚集索引