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

資料庫開事務sql

發布時間: 2022-04-01 00:13:53

① 如何利用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中沒有像 DELPHI 那樣 TRY Finnal 的方式,通常都是這樣寫:

--判斷表的存在性
If NOT Exists(select * from dbo.sysobjects where name='sysobjects')
--自定義錯誤號,說明表不存在。
Return -1

--執行查詢
select * from table1

--有錯誤反回錯誤號
If @@Error<>0
Return @@Error

--正確反回0
Return 0

--補充回答
在Sql Server中,是沒有象開發工具那種的容錯處理,他有的只是判斷對象的存在性及用事務來解決數據的完整性、一致性等等。但通用的做法都是在可能發生錯誤的地方設置錯誤處理或反回錯誤號,自定義的也可以。這樣在程序里我們可以捕獲錯誤號來進行相應的錯誤提示。

--補充回答
「多人同時訪問時一旦某個事務永久鎖定了一個表,那其它人都無法訪問了」你說的這個問題是資料庫對象鎖定問題,跟你提問的問題有所區別,資料庫對象鎖定實質是由DBMS完成的,如果對象真的被鎖定了的話,只有在對象被解鎖以後才能對其進行操作,當然能進行什麼樣的操作也跟鎖的類型及類度相關。開發者對對象進行加鎖,也要分不同操作進行,操作完成後DBMS會自動解鎖。
如果出現像你說的死所現像的話,DBMS是不能完成解鎖功能的,只有人工進行處理了。

至於你提出的問題,你的想法是好的,但是DBMS都是通過提前判斷來進行容錯的,或者拋出錯誤號在程序中進行捕獲處理。

③ 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 主鍵表(主鍵列)

④ mysql怎麼給操作兩個資料庫的sql加事務

mysql一般表使用innodb引擎才能使用事務,請先確定表引擎為innodb

⑤ 資料庫事務操作具體怎麼操作

SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;");
myConnection.Open();

SqlTransaction myTrans = myConnection***ginTransaction(); //使用New新生成一個事務
SqlCommand myCommand = new SqlCommand();
myCommand.Transaction = myTrans;

try
{
myCommand.CommandText = "Update Address set location='23 rain street' where userid='0001'";
myCommand.ExecuteNonQuery();
myTrans.Commit();
Console.WriteLine("Record is udated.");
}
catch(Exception e)
{
myTrans.Rollback();
Console.WriteLine(e.ToString());
Console.WriteLine("Sorry, Record can not be updated.");
}
finally
{
myConnection.Close();
}

⑥ sql 事務

@@ERROR
如果前一個 Transact-SQL 語句執行沒有錯誤,則返回 0。

看看你的存儲過程.
理論上來說
update S_CELL
set AMOUNT=50 where PRODUCT_ID='10012' ---修改當前庫存


update S_GATHER_DETAILS
set GATHER_TAG='K002-2' where PRODUCT_ID='10012' --修改入庫狀態

並不會發生錯誤 ( 通常情況下,如果資料庫沒問題的話。)

也就是說,那個 update 要出錯。 要麼就是 欄位大小不對。
比如 GATHER_TAG 的數據類型為 varchar(2), 或者是 int
那麼 update 操作, 是要出錯了。

要麼 你的 表裡面有特殊的約束, 比如唯一約束
例如 GATHER_TAG 是 唯一的. 表裡面已經有個 'K002-2'
那麼 update 操作, 是要出錯了。

如果 沒有數據的話, 是不抱錯的.

不知道你的資料庫是 SQL 2000 ?
還是 SQL 2005/2008 的。
如果是後者, 可以嘗試用 try / catch 的方式來處理。 省事,簡單。

http://hi..com/wangqing999/blog/item/b2494d50cee15856d0090649.html

⑦ sql事務訪問資料庫多少次

一、跨資料庫訪問
第一種方式
SELECT * FROM OPENDATASOURCE(
'SQLOLEDB',
'Data Source=遠程ip;User ID=sa;Password=密碼'
).庫名.dbo.表名
WHERE 條件
第二種方式
在sql server組->服務->安全性->鏈接伺服器下建立一個具有別名的鏈接伺服器。然後通過以下方式訪問:
SELECT * FROM [鏈接伺服器名].庫名.dbo.表名
WHERE 條件
需要注意的是建立鏈接資料庫伺服器類型如果選擇「SQL server」,那麼鏈接伺服器名稱必須用要鏈接的伺服器的在網路中的機器名或IP,如果要使用其它別名,可以在WINDOWS\system32\drivers\etc\hosts文件里添加一個別名的映射。

解除SQL阻止(sqlserver 2005情況)
SQL Server 阻止了對組件 『Ad Hoc Distributed Queries』 的 STATEMENT』OpenRowset/OpenDatasource』 的訪問,因為此組件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 『Ad Hoc Distributed Queries』。有關啟用 『Ad Hoc Distributed Queries』 的詳細信息,請參閱 SQL Server 聯機叢書中的 「外圍應用配置器」。
因為SQL2005默認是沒有開啟』Ad Hoc Distributed Queries』 組件,開啟方法如下
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
關閉Ad Hoc Distributed Queries:
exec sp_configure 'Ad Hoc Distributed Queries', 0
reconfigure
exec sp_configure 'show advanced options', 0
reconfigure

二、分布式事務的配置

1.用DTCPing.exe工具測試兩台機器的DTC服務是否可以聯通。
2.如果有問題檢查MSDTC服務是否啟動。
3.MSDTC依賴於RPC,RPC使用的埠是135,測試135埠是否打開.是否有防火牆?如果有先關了防火牆. telnet IP 135 如果是關閉的打開它.
4.打開「控制面板->管理工具->組件服務」,然後展開「組件服務->計算機->我的電腦」右鍵屬性。選擇MSDTC的Tab欄,點擊安全性配置按鈕,打開窗口,將「網路DTC訪問」選項選中,並將「允許遠程客戶端」,「允許入站」,「允許出站」都選中,並選擇「不要求進行驗證」,「啟用事務Internet協議(TIP)事務」,「啟用XA事務」都選中。然後確定即可。(以上選項windows默認不開放,必須配置)
5.檢查你的兩台伺服器是否在同一個域中. 如果不在同一個域中,是否建立可信任聯接.
6.如果是WIN2000,升級到SP4
7.確認MDAC版本是2.6以上,最好是2.8.
8.在SQL server存儲過程中使用分布式事務時,必須SET XACT_ABORT ON --設置分布式事務如果發生問題主動回滾操作
9.可以聲明使用BEGIN DISTRIBUTED TRANSACTION,如果未明確生明,在事務塊中包含鏈接伺服器的訪問,SQL server會自動升級成分布式事務。

⑧ Mysql資料庫中,事務是指什麼如何使用該功能

MySQL 事務

什麼是事務?

MySQL 事務主要用於處理操作量大,復雜度高的數據。比如說,在人員管理系統中,你刪除一個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些資料庫操作語句就構成一個事務!

在 MySQL 中只有使用了 Innodb 資料庫引擎的資料庫或表才支持事務。

  • 事務處理可以用來維護資料庫的完整性,保證成批的 SQL 語句要麼全部執行,要麼全部不執行。

  • 事務用來管理 insert,update,delete 語句

一般來說,事務是必須滿足4個條件(ACID):原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。

  • 原子性:一個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

  • 一致性:在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續資料庫可以自發性地完成預定的工作。

  • 隔離性:資料庫允許多個並發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務並發執行時由於交叉執行而導致數據的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復讀(repeatable read)和串列化(Serializable)。

  • 持久性:事務處理結束後,對數據的修改就是永久的,即便系統故障也不會丟失。

在 MySQL 命令行的默認設置下,事務都是自動提交的,即執行 SQL 語句後就會馬上執行 COMMIT 操作。因此要顯式地開啟一個事務務須使用命令 BEGIN 或 START TRANSACTION,或者執行命令 SET AUTOCOMMIT=0,用來禁止使用當前會話的自動提交。

from 樹懶學堂 - 一站式數據知識平台

⑨ 關於SQL資料庫的事務處理

如果只對一個表操作,可以採用adLockBatchOptimistic模式,即:
rs.open sql語句,連接,adOpenKeyset,adLockBatchOptimistic
更新的時候不需要事務處理,而是:
do while not rs.eof
rs.edit
rs.fields(...).value=...
rs.update
rs.movenext
loop
rs.updatebatch

⑩ sql事務怎麼使用

BEGIN TRANSACTION MyTransaction
GO
UPDATE roysched
SET royalty = royalty * 1.10
WHERE title_id LIKE 'Pc%'
GO
IF (2>1)//條件自己寫
COMMIT TRANSACTION MyTransaction
ELSE
ROLLBACK TRANSACTION MyTransaction
GO