我们为什么要有事务?
通常从用户的角度来看,对数据库中一些操作的集合被认为是一个独立的单元,例如从微信或者支付宝用户的立场来看,从钱包或者余额中转账到其他账户或者银行卡中的资金转账是一次单一的操作。
例子 A001账户现在有金额500 ; B001账户现在有金额0;
当账户A001转账给账户B时候 ,我们期望的是下面1、2都能执行操作,但是遗憾的是,
有的时候我们执行了1,
但是2因为各种各样的原因没有进行执行。
1、 A-500 update salary set salary=salary-500 where id=A001;
2、 B+500; update salary set salary=salary+500 where id=B001;
而在数据库系统中,这是由几个操作组成的。但是有一点是最基本的,这些操作要么全部发生,要么由于出错而全不发生。
有一种情况是大家都不能接受的,那就是我把钱转账给别人,别人没收到,但是我的钱却少了。
数据库中的事务介绍及概念
构成单一逻辑工作单元的操作集合称作事务(transaction),讲人话就是我们这一个事务中包含了 :对账户A001减少500金额的操作、对账户B001增加500金额的操作、以及其他保证数据安全和完整性的底层维护操作。事务用形如begin transation 和end transation 语句来界定。事务由begin transation与end transation 之间执行的全体操作组成。
这些步骤集合必须作为单一的、不可分割的单元出现。因为事务是不可分割的,所以要么执行其全部内容,要么全不执行--------------即使在事务的运行过程中,有故障产生,数据库系统也必须保证事务的正确执行。
如果一个事务已经开始执行,但是由于某些原因失败,则事务对数据库造成的任何可能的修改都要进行撤销。无论事务本身是否失败(例如10/0 异常)、或者操作系统崩溃,又或者突然断电,这项要求都要成立。正如我们所看到的确保这个要求是很困难的,因为对数据库的一些修改可能存在与事务的主存变量中,而另外一些已经写入数据库并且已经被存储到磁盘上。这种要么全执行、要么全不执行的特性被称为原子性(atomicity)。
后续敬请期待!!!
|