什麼是事務
事務時包含1條或多條語句的邏輯單元。事務中的語句是乙個整體,要麼一起提交,要麼一起撤銷。事務在提交前可以回滾,一旦提交就不能撤銷修改了,是永久性的修改。
為什麼使用事務
可以例舉生活中的例子,比如銀行轉賬:a向b轉100萬。程式的執行順序:1.a賬戶減掉100萬 2.b賬戶增加100萬。若是都成功執行倒沒什麼,假設1成功執行,2執行失敗,就會出問題。運用事務就不會出現這種問題,因為只要其中有一步操作失敗,事務就會回滾,之前的所有操作將會被撤銷。
事務的基本控制語句
1.begin transaction:事務開始
2.commit transaction:事務提交
3.rollback transaction:事務回滾
事務的特性(acid)
1.atomic(原子性):事務中程式是資料庫的邏輯工作單元,對資料的修改要麼全執行,要麼全不執行。
2.consistent(一致性):事務執行前後資料一致,事務完成之後資料的修改才可見。
3.isolated(隔離性):併發事務之間不能相互干擾
4.durable(永續性):事務一旦提交就是對資料的永久修改。
下面是乙個包含事務的儲存過程的例子:
1 alter proc [dbo].[proc_insertstudent]2 @stuname nvarchar(50),@stuclassid int,@stuage int
3 as
4 begin
5 set nocount on --on表示不返回計數
6 set xact_abort on --當執行事務時,如果出錯,會將transcation設定為uncommittable狀態
7 8 begin try
9 declare @stucountbyname int;
10 select @stucountbyname=count(*) from students where name=@stuname;
11 12 if(isnull(@stuname,'')='')
13 begin
14 print('名字不能為空');
15 return;
16 end
17 18 if(@stucountbyname>0)
19 begin
20 print('名字重複');
21 return
22 end
23 24 begin tran --開啟事務
25 insert into students(name,classid,age) values(@stuname,@stuclassid,@stuage)
26 commit tran --提交事務
27 28 end try
29 30 begin catch
31 if xact_state()=-1
32 rollback tran; --回滾事務
33 select error_number() as errornumber;
34 select error_message() as errormsg;
35 end catch
36 set xact_abort off;
37 end
其中students表:
1 create table [dbo].[students](2 [id] [int] identity(1,1) not null primary key,
3 [name] [nvarchar](50) not null,
4 [classid] [int] not null,
5 [age] [int] not null,
6 [createtime] [datetime] not null
7 );
1 alter proc [dbo].[proc_insertstudent]2 @stuname nvarchar(50),@stuclassid int,@stuage int
3 as
4 begin
5 set nocount on --on表示不返回計數
6 set xact_abort on --當執行事務時,如果出錯,會將transcation設定為uncommittable狀態
7 8 begin try
9 declare @stucountbyname int;
10 select @stucountbyname=count(*) from students where name=@stuname;
11 12 if(isnull(@stuname,'')='')
13 begin
14 print('名字不能為空');
15 return;
16 end
17 18 if(@stucountbyname>0)
19 begin
20 print('名字重複');
21 return
22 end
23 24 begin tran --開啟事務
25 insert into students(name,classid,age) values(@stuname,@stuclassid,@stuage)
26 commit tran --提交事務
27 28 end try
29 30 begin catch
31 if xact_state()=-1
32 rollback tran; --回滾事務
33 select error_number() as errornumber;
34 select error_message() as errormsg;
35 end catch
36 set xact_abort off;
37 end
SQL Server 中建立索引
索引的概念 建立索引的目的 提高了資料庫系統的效能,加快資料的查詢速度與減少系統的響應時間。索引是什麼 資料庫中的索引類似於一本書的目錄,在一本書中通過目錄可以快速找到你想要的資訊,而不需要讀完全書。在資料庫中,資料庫程式使用索引可以快速查詢到表中的資料,而不必掃瞄整個表。書中的目錄是乙個字詞以及各...
在SQLSERVER中建立DBLINK
配置sqlserver資料庫的dblink exec sp addlinkedserver server was sms srvproduct provider sqloledb datasrc 10.131.20.100 exec sp addlinkedsrvlogin was sms fals...
SqlServer中建立Oracle連線伺服器
第一種 介面操作 1 展開伺服器物件 鏈結伺服器 右擊 新建鏈結伺服器 輸入鏈結伺服器的 鏈結成功後 第二種 語句操作 注 需要提前安裝 oracle 客戶端程式,重啟機器。如果沒有 oracle 客戶端程式,提示 未找到 oracle 客戶端和網路元件 exec sp addlinkedserve...