事务
:将若干条SQL指令作为一个整体交给数据库执行,要么全部执行,要么全部撤销。
原子性/一致性/隔离性/持久性
-1-
显示事物
/–使用事务进行解决–/
–开始一个事务
BEGIN TRANSACTION tran_bank –也可简写为begin tran tran_bank
–定义一个用于记录错误的变量
DECLARE @tran_error INT
SET @tran_error = 0
–在张三的账户减去
UPDATE bank SET currentMoney = currentMoney - 10000 WHERE customerName = ‘张三’
SET @tran_error = @tran_error + @@error
–在李四的账户增加
UPDATE bank SET currentMoney = currentMoney + 10000 WHERE customerName = ‘李四’
SET @tran_error = @tran_error + @@error
IF @tran_error <> 0
BEGIN
–执行出错,回滚事务
ROLLBACK TRANSACTION
PRINT ‘转账失账,交易已取消’
END
ELSE
BEGIN
–没有发现错误,提交事务
COMMIT TRANSACTION
PRINT ‘交易成功,已保存新数据’
END
GO
--再次查看转帐后的结果。
SELECT * FROM bank
GO
-2-
自动提交事物
-3-
隐式事物
-游标-
游标:一种能从多条数据记录的结果集中每次提取一条记录的机制。
-允许定位到结果集中的特定行
-从结果集的当前位置检索一行或多行
-支持对结果集中当前位置的行进行修改
T-SQL游标
API游标
客户端游标
游标基本操做
/–语法结构–/
–DECLARE cursor_name –游标名
–CURSOR [LOCAL | GLOBAL] –全局或局部的
–[FORWARD ONLY | SCROLL] –游标滚动方式
–[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC] –游标读取方式
–FOR SELECT_statements –查询语句
–[FOR UPDATE [OF Column_name[,….N]]] –可更改字段
/*--使用游标--*/
--1.声明游标
DECLARE bank_cursor
CURSOR LOCAL
scroll
FOR SELECT * FROM bank
--FOR SELECT customerName,currentMoney FROM bank --获取部分列
--2.打开该游标
OPEN bank_cursor
--3.读取游标
--定义个变量,用于存放游标中读取出来的值
DEClARE @id int
DECLARE @name CHAR(10)
DECLARE @money MONEY
--读取游标的第一条记录行,并存放在变量中
FETCH first FROM bank_cursor INTO @id,@name,@money
--循环读取游标中的记录
PRINT '读取的数据如下:'
WHILE (@@fetch_status = 0)
BEGIN
--用print输出读取的数据
PRINT '账户名:' + @name + ' 余额:' + convert(VARCHAR,@money)
--update bank set currentMoney = currentMoney+1000 where customerId = @id
--读取下一条记录行
FETCH next FROM bank_cursor INTO @id,@name,@money
END
--4.读取完成后关闭游标
CLOSE bank_cursor
--5.释放游标
DEALLOCATE bank_cursor