东莞网络公司网站建设,南宁网站托管,网站seo注意事项,做免费的网站教程什么是事务(Transaction)
是并发控制的单元#xff0c;是用户定义的一个操作序列。这些操作要么都做#xff0c;要么都不做#xff0c;是一个不可分割的工作单位。通过事务#xff0c;sql 能将逻辑相关的一组操作绑定在一起#xff0c;以便服务器 保持数据的完整性。事务…什么是事务(Transaction)
是并发控制的单元是用户定义的一个操作序列。这些操作要么都做要么都不做是一个不可分割的工作单位。通过事务sql 能将逻辑相关的一组操作绑定在一起以便服务器 保持数据的完整性。事务通常是以begin/start transaction开始以commit或rollback结束。Commint表示提交即提交事务的所有操作。具体地说就是将事务中所有对数据的更新写回到磁盘上的物理数据库中去事务正常结束。Rollback表示回滚即在事务运行的过程中发生了某种故障事务不能继续进行系统将事务中对数据库的所有已完成的操作全部撤消滚回到事务开始的状态。
设想网上购物的一次交易其付款过程至少包括以下几步数据库操作
1、更新客户所购商品的库存信息
2、保存客户付款信息–可能包括与银行系统的交互
3、生成订单并且保存到数据库中
4、更新用户相关信息例如购物数量等等
正常的情况下这些操作将顺利进行最终交易成功与交易相关的所有数据库信息也成功地更新。但是如果在这一系列过程中任何一个环节出了差错例如在更新商品库存信息时发生异常、该顾客银行帐户存款不足等都将导致交易失败。一旦交易失败数据库中所有信息都必须保持交易前的状态不变比如最后一步更新用户信息时失败而导致交易失败那么必须保证这笔失败的交易不影响数据库的状态–库存信息没有被更新、用户也没有付款订单也没有生成。否则数据库的信息将会一片混乱而不可预测。
数据库事务正是用来保证这种情况下交易的平稳性和可预测性的技术
为什么要使用事务
1、为了提高性能
2、为了保持业务流程的完整性
3、使用分布式事务
事务的特性
ACID
1 - 原子性atomicity
事务是数据库的逻辑工作单位而且是必须是原子工作单位对于其数据修改要么全部执行要么全部不执行。
2、一致性consistency
事务在完成时必须是所有的数据都保持一致状态。在相关数据库中所有规则都必须应用于事务的修改以保持所有数据的完整性。
3、隔离性isolation
一个事务的执行不能被其他事务所影响。企业级的数据库每一秒钟都可能应付成千上万的并发访问因而带来了并发控制的问题。由数据库理论可知由于并发访问在不可预料的时刻可能引发如下几个可以预料的问题见“二、事务的并发问题“
4、持久性durability
一个事务一旦提交事物的操作便永久性的保存在DB中。即使此时再执行回滚操作也不能撤消所做的更改
事务的并发问题
1、脏读Dirty Read
一个事务读取到了另一个事务未提交的数据操作结果。这是相当危险的因为很可能所有的操作都被回滚。
2、不可重复读虚读NonRepeatable Read
一个事务对同一行数据重复读取两次但是却得到了不同的结果。例如事务T1读取某一数据后事务T2对其做了修改当事务T1再次读该数据时得到与前一次不同的值。
3、幻读Phantom Read
事务在操作过程中进行两次查询第二次查询的结果包含了第一次查询中未出现的数据或者缺少了第一次查询中出现的数据这是因为在两次查询过程中有另外一个事务插入数据造成的
事务的隔离级别
1、读未提交
Read uncommitted最低级别以上情况均无法保证。
2、读已提交
Read committed可避免脏读情况发生。
3、可重复读
Repeatable read可避免脏读、不可重复读情况的发生。不可以避免幻读。
4、串行化读 Serializable事务只能一个一个执行避免了脏读、不可重复读、幻读。执行效率慢使用时慎重