說明:灰色部分為事務(wù)前鋪墊操作,黑色部分為事務(wù)操作
以下介紹的是(顯式事務(wù))
/*建庫*/
USE master
GO
IF EXISTS(SELECT * FROM SYSDATABASES WHERE NAME='bankDB')
DROP DATABASE bankDB
EXEC XP_CMDSHELL 'MD D:\BANK' --創(chuàng)建存放數(shù)據(jù)庫文件夾
CREATE DATABASE bankDB
ON
(
NAME = 'bankDB_data',
FILENAME = 'D:\BANK\bankDB_data.MDF',
SIZE = 10MB,
FILEGROWTH = 15%
)
LOG ON
(
NAME = 'bankDB_LOG',
FILENAME = 'D:\BANK\bankDB_LOG.LDF',
SIZE = 10MB,
FILEGROWTH = 15%
)
GO
/*建表*/
USE bankDB
GO
IF EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME = 'TEST')
DROP TABLE TEST
CREATE TABLE TEST
(
TNAME VARCHAR(8) NOT NULL PRIMARY KEY, --主鍵
TYUER MONEY CHECK (TYUER>=1) --存款余額不能小于1
)
GO
--為表插入數(shù)據(jù)
INSERT TEST VALUES ('A',1000)
INSERT TEST VALUES ('B',1)
GO
/*事務(wù)*/
BEGIN TRANSACTION--開始事務(wù)
DECLARE @errorSun INT --定義錯(cuò)誤計(jì)數(shù)器
SET @errorSun=0 --沒錯(cuò)為0
UPDATE TEST SET TYUER=TYUER-10 WHERE TNAME='A' --事務(wù)操作SQL語句
SET @errorSun=@errorSun+@@ERROR --累計(jì)是否有錯(cuò)
UPDATE TEST SET TYUER=TYUER+10 WHERE TNAME='B' --事務(wù)操作SQL語句
SET @errorSun=@errorSun+@@ERROR --累計(jì)是否有錯(cuò)
IF @errorSun<>0
BEGIN
PRINT '有錯(cuò)誤,回滾'
ROLLBACK TRANSACTION--事務(wù)回滾語句
END
ELSE
BEGIN
PRINT '成功,提交'
COMMIT TRANSACTION--事務(wù)提交語句
END
GO
總結(jié):
1.什么是事務(wù):事務(wù)是一個(gè)不可分割的工作邏輯單元,在數(shù)據(jù)庫系統(tǒng)上執(zhí)行并發(fā)操作時(shí)事務(wù)是做為最小的控制單元來使用的。他包含的所有數(shù)據(jù)庫操作命令作為一個(gè)整體一起向系提交或撤消,這一組數(shù)據(jù)庫操作命令要么都執(zhí)行,要么都不執(zhí)行。
2.事務(wù)的語句
開始事物:BEGIN TRANSACTION
提交事物:COMMIT TRANSACTION
回滾事務(wù):ROLLBACK TRANSACTION
3.事務(wù)的4個(gè)屬性
①原子性(Atomicity):事務(wù)中的所有元素作為一個(gè)整體提交或回滾,事務(wù)的個(gè)元素是不可分的,事務(wù)是一個(gè)完整操作。
②一致性(Consistemcy):事物完成時(shí),數(shù)據(jù)必須是一致的,也就是說,和事物開始之前,數(shù)據(jù)存儲(chǔ)中的數(shù)據(jù)處于一致狀態(tài)。保證數(shù)據(jù)的無損。
③隔離性(Isolation):對(duì)數(shù)據(jù)進(jìn)行修改的多個(gè)事務(wù)是彼此隔離的。這表明事務(wù)必須是獨(dú)立的,不應(yīng)該以任何方式以來于或影響其他事務(wù)。
④持久性(Durability):事務(wù)完成之后,它對(duì)于系統(tǒng)的影響是永久的,該修改即使出現(xiàn)系統(tǒng)故障也將一直保留,真實(shí)的修改了數(shù)據(jù)庫
4.事務(wù)的保存點(diǎn)
SAVE TRANSACTION 保存點(diǎn)名稱 --自定義保存點(diǎn)的名稱和位置
ROLLBACK TRANSACTION 保存點(diǎn)名稱 --回滾到自定義的保存點(diǎn)
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。