SQL 数据库 学习 034 事务
2016-10-24 13:23
162 查看
我的电脑系统:Windows 10 64位
SQL Server 软件版本: SQL Server 2014 Express
本篇博客里面使用了
通俗的说:
事务可以保证避免数据处于一种不合理的中间状态
利用事务可以实现多个用户对共享资源的同时访问
例子:
银行中的转账操作,账户A把一定数量的款项转到账户B上,这个操作包括两个步骤,一个是从账户A上把存款减去一定数量,二是在账户B上把存款加上相同的数量。这两个步骤显然要么都完成,要么都取消,否则银行就会受损失。显然,这个转账操作中的两个步骤就构成一个事务。
假设A和B用户都希望查询修改M表数据,A用户不应该刚把M表的数据改成5,查询时显示的数据却是8(因为B用户修改M表的数据成8了)。事务必须得保证多个用户对共享资源同时访问时,数据库给用户的反应是合理的。
事务就是专门解决这个问题的。
开启事务:
提交事务:
回滚(撤销)事务:
一旦事务提交或回滚,则事务结束。
判断某条语句执行是否出错:
使用全局变量
避免数据处于不合理的中间状态。(比如:转账)
怎样避免多用户同时访问时,呈现给用户的数据是合理的。
二 . 事务和线程的关系:
事务也是通过锁来解决很多问题的。(线程同步就是通过锁来解决的
三 . 事务和第三方插件的关系:
直接使用事务库技术难度很大,很多人是借助第三方插件来实现。(因为我们一般人不需要细细的研究数据库中事务的语法细节。)
第三方插件要想完成预期的功能,一般必须得借助数据库中的事务机制。
原子性:事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。
一致性:当事务完成时,数据必须处于一致状态,要么处于开始状态要么处于结束状态,不允许出现中间状态!
隔离性:指当前的事务与其他未完成的事务是隔离的。在不同的隔离级别下,事务的读取操作,可以得到的结果是不同的。
持久性:事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性。
一个例子:
现在我要将张三的1000打给李四。(这样做会失败,因为上面已经给
普通的查询指令进行转账:
使用事务实现进行转账:(不重要,掌握就可以,语法怪异,实用性不强。)
请访问:http://www.aobosir.com/
SQL Server 软件版本: SQL Server 2014 Express
本篇博客里面使用了
scott库,如何你现在还没有添加这个库到你的服务器里面,请在查看本篇博客前,访问这篇博文来在你的服务器里面附加
scott库。
为什么需要事务
事务主要用来保证数据的合理性和并发处理的能力!通俗的说:
事务可以保证避免数据处于一种不合理的中间状态
利用事务可以实现多个用户对共享资源的同时访问
例子:
银行中的转账操作,账户A把一定数量的款项转到账户B上,这个操作包括两个步骤,一个是从账户A上把存款减去一定数量,二是在账户B上把存款加上相同的数量。这两个步骤显然要么都完成,要么都取消,否则银行就会受损失。显然,这个转账操作中的两个步骤就构成一个事务。
假设A和B用户都希望查询修改M表数据,A用户不应该刚把M表的数据改成5,查询时显示的数据却是8(因为B用户修改M表的数据成8了)。事务必须得保证多个用户对共享资源同时访问时,数据库给用户的反应是合理的。
事务就是专门解决这个问题的。
什么是事务
一系列操作要么全部执行成功,要么全部执行失败,这就是事务。如何创建事务
T-SQL 使用下列语句管理事务:开启事务:
begin transaction
提交事务:
commit transaction
回滚(撤销)事务:
rollback transaction
一旦事务提交或回滚,则事务结束。
判断某条语句执行是否出错:
使用全局变量
@@error
@@error只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计。如:
set @errorSum=@errorSum+@@error
初学者必须要掌握的三个问题:
一 . 事务时用来研究什么的:避免数据处于不合理的中间状态。(比如:转账)
怎样避免多用户同时访问时,呈现给用户的数据是合理的。
二 . 事务和线程的关系:
事务也是通过锁来解决很多问题的。(线程同步就是通过锁来解决的
sychronized)
三 . 事务和第三方插件的关系:
直接使用事务库技术难度很大,很多人是借助第三方插件来实现。(因为我们一般人不需要细细的研究数据库中事务的语法细节。)
第三方插件要想完成预期的功能,一般必须得借助数据库中的事务机制。
事务 — 总结 和 实例
总结事务的四大特性:事务必须具备以下四个属性,简称ACID属性。原子性:事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。
一致性:当事务完成时,数据必须处于一致状态,要么处于开始状态要么处于结束状态,不允许出现中间状态!
隔离性:指当前的事务与其他未完成的事务是隔离的。在不同的隔离级别下,事务的读取操作,可以得到的结果是不同的。
持久性:事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性。
一个例子:
--创建Test库 create database Test --进入Test库 use Test --创建一个bank表 create table bank ( customerEname nvarchar(200), currrentMoney money ) --插入数据 insert into bank values ('张三', 1000) insert into bank values ('李四', 1) --给bank表中的currentMoney属性添加一个约束 alter table bank add constraint check_currentMoney check(currentMoney>=1)
现在我要将张三的1000打给李四。(这样做会失败,因为上面已经给
check_currentMoney属性添加了一个约束:
currentMoney>=1)。
普通的查询指令进行转账:
update bank set currentMoney=currentMoney-1000 where customerEname='张三' update bank set currentMoney=currentMoney+1000 where customerEname='李四'
使用事务实现进行转账:(不重要,掌握就可以,语法怪异,实用性不强。)
begin transaction declare @errorSum int set @errorSum = 0 update bank set currentMoney=currentMoney-1000 where customerEname='张三' set @errorSum = @errorSum + @@error update bank bank set currentMoney=currentMoney+1000 where customerEname='李四' set @errorSum = @errorSum + @@error if (@errorSum <> 0) begin print '转账失败' rollback transaction end else begin print '转账成功' commit transaction end
请访问:http://www.aobosir.com/
相关文章推荐
- SQL的详细语法介绍——对于学习数据库最基础知识一
- SQL的详细语法介绍——对于学习数据库最基础知识一
- ASP.NET连接数据库SQL2005 学习总结
- 执行多条SQL语句,实现数据库事务。
- MS SQL Server数据库事务锁机制分析
- MS SQL Server数据库事务锁机制分析
- SQL的详细语法介绍——对于学习数据库最基础知识一
- [Microsoft][ODBC SQL Server Driver][SQL Server]数据库 'ZWHome' 的日志已满。请备份该数据库的事务日志以释放一些日志空间
- MS SQL Server数据库事务锁机制分析
- MS SQL Server数据库事务锁机制分析
- SQL的详细语法介绍——对于学习数据库最基础知识二
- MS SQL Server数据库事务锁机制分析
- 自己写的实现数据库事务的简单方法ExecuteSqlTran()
- 今天打开网站,突然发现sql 2005出现错误:数据库 'mybase_db' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。
- IT 学习SQL 数据库网、ASP.NET、XML、的网址,,
- SQL的详细语法介绍——对于学习数据库最基础知识[转]
- 自己写的实现数据库事务的简单方法ExecuteSqlTran()
- SQL Server Mobile 学习(二):通过 VS2005 创建和连接及操作 SQL Server Mobile 数据库
- 用sql语句查看SQL Server 数据库的事务日志
- MS SQL Server数据库事务锁机制分析