當前位置:首頁 » 編程語言 » sql設置事務
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql設置事務

發布時間: 2022-04-22 14:36:45

sql事務概念是什麼,舉個例子說明什麼樣的東西是事務,與程序又有何區別,

資料庫事務是構成單一邏輯工作單元的操作集合。

舉例:轉賬是生活中常見的操作,比如從A賬戶轉賬100元到B賬號。站在用戶角度而言,這是一個邏輯上的單一操作,然而在資料庫系統中,至少會分成兩個步驟來完成:

1、將A賬戶的金額減少100元

2、將B賬戶的金額增加100元。

與程序的區別:一個程序中包含多個事務。在關系資料庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程序。

(1)sql設置事務擴展閱讀:

事務必須具備四個屬性,簡稱ACID屬性:

1、原子性(Atomicity):事務是一個完整的操作。事務的各步操作是不可分的(原子的);要麼都執行,要麼都不執行。

2、一致性(Consistency):當事務完成時,數據必須處於一致狀態。

3、隔離性(Isolation):對數據進行修改的所有並發事務是彼此隔離的,這表明事務必須是獨立的,它不應以任何方式依賴於或影響其他事務。

4、永久性(Durability):事務完成後,它對資料庫的修改被永久保持,事務日誌能夠保持事務的永久性。

⑵ 我是一個初學者,SQL怎麼寫事務請高手幫幫忙!!!!

事務控制語句 (transaction)
事務就是一系列的操作,要麼同時完成,要麼不完成
都是由一個dml語句開始的

updata emp2 set sal=sal*2;
delete from dept2;
insert into salgrade values (6,10000,20000);
//這樣是一個transaction語句,如果使用rollback;返回,則上面三條語句將不起任何作用
transaction語句的結束為 1.rollback transaction語句結束.
2.commit;提交完成,transaction語句結束
3.執行ddl,或則dcl語句事務自動提交.
4.當用戶正常斷開連接時,transcation自動提交
5.當用戶非正常斷開連接時,Oracle自動執行rollback;語句
如:select * from dept2; //transcation開始
create table t (a varchar2(20));//執行了ddl語句,則transcation語句自動提交

⑶ 如何利用SQL Server 2012資料庫操作事務管理

一、啟用FileTable
1、修改資料庫引擎的屬性
打開「SQL Server配置管理器」,修改SQL Server資料庫引擎的屬性。使用此頁可針對此 Microsoft SQL Server 2012安裝啟用 FILESTREAM。

(1)針對 Transact-SQL 訪問啟用 FILESTREAM
選中此項可針對 Transact-SQL 訪問啟用 FILESTREAM。 必須選中此控制選項,才能使用其他控制選項。如果不啟用此選項,就不能添加FileStream文件組。
(2)針對文件 I/O 流訪問啟用 FILESTREAM
選中此項可針對 FILESTREAM 啟用 Win32 流訪問。
(3)Windows 共享名
使用此控制選項可輸入將用來存儲 FILESTREAM 數據的 Windows 共享的名稱。默認為該SQL Server實例的名稱。
(4)允許遠程客戶端針對 FILESTREAM 數據啟用流訪問
選中此控制選項可允許遠程客戶端訪問此伺服器上的此 FILESTREAM 數據。

2、修改伺服器的屬性
打開「SQL Server Management Studio」,修改該實例的配置。默認配置如下:

上述選項解釋如下:
(1)「FILESTREAM 訪問級別」顯示 SQL Server 實例上支持的 FILESTREAM 的當前級別。若要更改訪問級別,請選擇以下值之一:
已禁用
無法將二進制大型對象 (BLOB) 數據存儲在文件系統中。此為默認值。即filestream access level=0
已啟用 Transact-SQL 訪問
可使用 Transact-SQL 訪問 FILESTREAM 數據,但不能通過文件系統進行訪問。即filestream access level=1
已啟用完全訪問
FILESTREAM 數據可使用 Transact-SQL 以及通過文件系統進行訪問。即filestream access level=0
注意:在首次啟用 FILESTREAM 時,您可能需要重新啟動計算機才能配置驅動程序。
(2)「FILESTREAM 共享名稱」顯示在安裝過程中選擇的 FILESTREAM 共享的只讀名稱。

在本次實驗中,我們將「FILESTREAM 訪問級別」 設定為:已啟用完全訪問。
如果是通過T-SQL腳本執行,則運行以下腳本:
EXEC sys.sp_configure N'filestream access level', N'2'
RECONFIGURE WITH OVERRIDE

注意:設置完成之後,重啟實例。

3、配置防火牆
若要在防火牆保護的環境中使用 FILESTREAM,客戶端和伺服器都必須能夠將 DNS 名稱解析為包含 FILESTREAM 文件的伺服器。FILESTREAM 要求 Windows 文件共享埠 139 和 445 處於打開狀態。

二、配置文件組
1、添加文件組
完成上述操作之後,就可以為該資料庫添加專用於FileStream的文件組。

如果是通過腳本操作,請運行以下腳本:
ALTER DATABASE [db01] ADD FILEGROUP [FileStreamFileGroup] CONTAINS FILESTREAM

2、添加文件
完成上述操作之後,就可以為該資料庫添加FilStream類型的資料庫文件。

在本例中,系統並沒有為「FileStream數據」的文件類型創建mdf或ndf文件,而是在文件夾C:\SqlData下面自動創建以邏輯名稱命名的文件夾,即 C:\SqlData\FileData。其中filestream.hdr 文件是 FILESTREAM 容器的頭文件。當這個資料庫被刪除時,mdf、ndf、log連同這個文件夾都會被刪除。

如果是通過腳本操作,請運行以下腳本:
ALTER DATABASE [db01] ADD FILE ( NAME = N'FileData', FILENAME = N'C:\SqlData\FileData' ) TO FILEGROUP [FileStreamFileGroup]
注意:在上例中,在運行腳本之前,必須存在C:\SqlData,建議使用右側的選擇按鈕選擇路徑。如果路徑不存在,就會報錯:

同時不能存在重復的文件夾,即不能存在C:\SqlData\FileData。否則也會報錯:

3、啟動非事務訪問
FileTable 使 Windows 應用程序可以獲取 FILESTREAM 數據的 Windows 文件句柄而不需要 SQL Server 事務。為了允許對 SQL Server 中存儲的文件進行此非事務性訪問,必須為要包含 FileTable 的每個資料庫在資料庫級別上指定所需的非事務性訪問級別。

選項解釋如下:
(1)FILESTREAM 非事務訪問
為從文件系統到 FileTables 中存儲的 FILESTREAM 數據的非事務性訪問指定以下選項之一:OFF、READ_ONLY 或 FULL。
如果在伺服器上未啟用 FILESTREAM,則該值將設置為 OFF 並且被禁用。在本次實驗中,將其設置為FULL。
(2)FILESTREAM 目錄名稱
為與所選資料庫相關聯的 FILESTREAM 數據指定目錄名稱。在 FileTable 文件夾層次結構中,此資料庫級目錄將成為在實例級別為 FILESTREAM 指定的共享名稱的子級以及在資料庫中創建的 FileTable 的父級。
如果啟用非事務性訪問時沒有提供目錄名稱,則在以後必須提供它,這樣才能在資料庫中創建 FileTable。

如果是通過腳本執行,如下:
ALTER DATABASE db01
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'ImageFiles' )
注意:更改現有資料庫時,調用帶 DIRECTORY_NAME FILESTREAM 選項的 ALTER DATABASE (Transact-SQL) 語句。使用這些選項更改目錄名稱時,資料庫必須以獨占方式鎖定,沒有打開的文件句柄。

說明:為檢查是否在資料庫上啟用了非事務性訪問,可以查詢目錄視圖,腳本如下:
SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
FROM sys.database_filestream_options

三、創建FileTable
1、創建第一個FileTable
「SQL Server Management Studio」只提供一個腳本模板,要想創建FileTable還是得用腳本完成:
USE db01
CREATE TABLE ImageTable1 AS FILETABLE
官方的範本為:
USE [db01]
CREATE TABLE [dbo].[ImageTable1] AS FILETABLE ON [PRIMARY] FILESTREAM_ON [FileStreamFileGroup]
WITH
(FILETABLE_DIRECTORY = N'ImageTable1', FILETABLE_COLLATE_FILENAME = Chinese_PRC_CI_AS)

2、創建第二個FileTable
CREATE TABLE ImageTable2 AS FILETABLE

3、獲取共享路徑
文件表創建之後,就會相應的產生一個文件表共享目錄,該目錄路徑可以通過內建函數獲取:
SELECT FileTableRootPath('ImageTable1')
本次實驗所返回的結果為:\\SQL1\SqlFile\ImageFiles\ImageTable1

4、查看
通過Windows資源管理器,可見已經創建了以GUID命名的文件夾。

通過SQL Server Management Studio,查看錶的結構。

四、操作
1、向文件夾中添加文件
通過 「Windows資源管理器」,向文件夾\\SQL1\SqlFile\ImageFiles\ImageTable1中添加一個文件A01.GIF。然後運行腳本:
select * from ImageTable1
結果如下:

可見, SQL Server自動在Table中添加了記錄。

2、文件改名
運行以下腳本:
update ImageTable1 set name='Cup.GIF' where name='A01.GIF'
通過「Windows資源管理器」,查看文件夾\\SQL1\SqlFile\ImageFiles\ImageTable1,可見文件A01.GIF已經被改名為Cup.GIF 。

3、查看共享文件夾
我們可以繼續復制其他文件,然後通過「Windows資源管理器」,查看文件夾。

4、刪除文件
可以使用腳本刪除,例如:
Delete ImageTable1 where name='Cup.GIF'
或者,通過「Windows資源管理器」直接刪除該文件。

五、備份和還原

1、備份資料庫
使用 SQL Server 備份資料庫時,FILESTREAM 數據將與資料庫中的結構化數據一起備份。

2、部分備份
如果不想將 FILESTREAM 數據與關系數據一起備份,則可以使用部分備份將 FILESTREAM 文件組排除在外。

⑷ 如何編寫SQL事務

給你一個參考的sql吧:

--創建帳戶表bank--
if exists(select* from sysobjects where name='bank')
drop table bank
create table bank
(
customerName char(10), --顧客姓名
currentMoney money --當前余額
)
go
/**//*--添加約束,帳戶不能少於元--*/
alter table bank add
constraint CK_currentMoney check(currentMoney>=1)
/**//*--插入測試數據--*/
insert into bank(customerName,currentMoney)
select '張三',1000 union
select '李四',1

select * from bank
go

/**//*--使用事務--*/
use stuDB
go
--恢復原來的數據
--update bank set currentMoney=currentMoney-1000 where customerName='李'
set nocount on --不顯示受影響的行數
print '查看轉帳事務前的余額'
select * from bank
go

/**//*--開始事務--*/
begin transaction
declare @errorSum int --定義變數,用於累計事務執行過程中的錯誤
/**//*--轉帳--*/
update bank set currentMoney=currentMoney-800 where customerName='張三'
set @errorSum=@errorSum+@@error --累計是否有錯誤
update bank set currentMoney=currentMoney+800 where customerName='李四'
set @errorSum=@errorSum+@@error --累計是否有錯誤

print '查看轉帳事務過程中的余額'
select * from bank

/**//*--根據是否有錯誤,確定事務是提交還是回滾--*/
if @errorSum>0
begin
print '交易失敗,回滾事務.'
rollback transaction
end
else
begin
print '交易成功,提交事務,寫入硬碟,永久保存!'
commit transaction
end
go

print '查看轉帳後的余額'
select * from bank
go

⑸ SQL中事務有幾種

有三種。第一種是顯式聲名的事務,這種事務要以begin
transaction為事務的起始標志。第二種是自動提交事務,這是sql
server的預設設置。每一個t-sql語句在執行完成後會被自動提交。第三種是隱含事務,在這種方式下,sql
server會在當前事務被提交或回滾後自動啟動一個新的事務,這個新事務直到用戶執行commit或rollback為止,這時系統又會啟動一個新事務。這樣就形成了一個連續的事務鏈。

⑹ SQL Server中事務處理怎麼用

BeginTrans用於開始一個事物;RollbackTrans用於回滾事務;CommitTrans用於提交所有的事務處理結果,即確認事務的處理。
事務處理可以將一組操作視為一個整體,只有全部
語句
都成功執行後,事務處理才算成功;若其中有一個語句執行失敗,則整個處理就算失敗,並恢復到處里前的狀態。
BeginTrans和CommitTrans用於
標記
事務的開始和結束,在這兩個之間的語句,就是作為事務處理的語句。判斷事務處理是否成功,可通過連接對象的Error集合來實現,若Error集合的成員個數不為0,則說明有
錯誤
發生,事務處理失敗。Error集合中的每一個Error對象,代表一個
錯誤信息

⑺ 在SQL中怎樣使用事務

SQL Server 需要顯示的定義 開始一個事務.
BEGIN TRANSACTION;

例如:
1> BEGIN TRY
2> -- SQL Server 需要顯示的定義 開始一個事務.
3> BEGIN TRANSACTION;
4> -- 插入2條同樣的數據,使主鍵重復,引發錯誤後回滾事務.
5> INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
6> INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
7> -- 執行成功後,需要提交事務.
8> COMMIT;
9> END TRY
10> BEGIN CATCH
11> PRINT('Main.錯誤代碼 = ' + STR(ERROR_NUMBER()));
12> PRINT('Main.錯誤嚴重級別 = ' + STR(ERROR_SEVERITY()));
13> PRINT('Main.錯誤狀態代碼 = ' + STR(ERROR_STATE()));
14> PRINT('Main.錯誤信息 = ' + ERROR_MESSAGE());
15> -- 回滾事務
16> ROLLBACK;
17> END CATCH
18>
19> go

⑻ sql如何創建事務或設置外鍵

可以用一個觸發器:
create trigger tri_stu
on 地址表
for update
as
declare @id int
declare @address varchar(20)
select @id=id,@address=address from inserted
update 學生表 set address=@address where [email protected]是2個表相關聯的列

建外鍵:
alter table 外鍵表
add constraint fk_stu
foreign key(外鍵列) references 主鍵表(主鍵列)

⑼ sql中什麼是事務啊

事務(Transaction),一般是指要做的或所做的事情。在計算機術語中是指訪問並可能更新資料庫中各種數據項的一個程序執行單元(unit)。

事務通常由高級資料庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執行所引起,並用形如begin transaction和end transaction語句(或函數調用)來界定。

(9)sql設置事務擴展閱讀

事務類型

(1)手動事務

手動事務允許顯式處理若干過程,這些過程包括:開始事務、控制事務邊界內的每個連接和資源登記、確定事務結果(提交或中止)以及結束事務。

(2)自動事務

.NET 頁、XML Web services方法或 .NET Framework 類一旦被標記為參與事務,它們將自動在事務范圍內執行。您可以通過在頁、XML Web services 方法或類中設置一個事務屬性值來控制對象的事務行為。

⑽ SQL Server啟動事務有幾種方式

有三種。第一種是顯式聲名的事務,這種事務要以BEGIN TRANSACTION為事務的起始標志。第二種是自動提交事
務,這是SQL Server的預設設置。每一個T-SQL語句在執行完成後會被自動提交。第三種是隱含事務,在這種方式下,
SQL Server會在當前事務被提交或回滾後自動啟動一個新的事務,這個新事務直到用戶執行COMMIT或ROLLBACK為止,這時系
統又會啟動一個新事務。這樣就形成了一個連續的事務鏈。

問:Cluster Index和Noncluster Index的區別是什麼?

答:Cluster Index和Noncluster Index的結構都是平衡樹。它們的主要區別是Cluster Index的葉子節點是DATA PAGE
而Noncluster Index的葉子節點是數據在DATA PAGE中的指針。

問:在SQL Server6.5,7.0中能否修改Table的名字?

答:可以使用SP_RENAME來修改Table的名字。

例如:

use pubs

create table test( a char(10))

sp_rename test,newtest

這個例子將新建的名為test的Table改為newtest。

問:修改SQL Server7.0所在機器的機器名後,不能啟動SQL Server,這種情況該如何處理?

答:在這種情況下,要運行SQL Server7.0 Setup程序。Setup程序會根據新的機器名重新設置SQL Server。

問:如果沒有成功的安裝SQL Server7.0,我該怎麼辦?

答:如果您沒有成功的安裝SQLServer7.0,有幾個文件可以幫助您確定是那一步出的錯。首先在Windows目錄下的
SQLstp.log文件包含有setup過程的詳細信息。查看這個文件可以確定Setup是在那一步出錯的。

如果Setup過程是在配置的部分出錯,那麼查看在MSSQL7\Log目錄下的錯誤日誌和在MSSQL7\Install目錄下的
Cnfgsvr.out文件。SQLServer7.0Setup運行一個名為Cnfgsvr.exe的應用程序來配置SQLServer。這個程序啟動SQLServer,
連接SQLServer並運行初始安裝腳本。在這一過程中出現的任何錯誤都會被寫入Cnfgsvr.out文件。