事务是由几个读取和修改数据的sql命令组成的,但是知道commit命令被执行之后,修改操作才被认为是正常的完成。显式事务常以Begin tran语句开头,以commit tran或者rollback tran语句结尾的。
事务具有acid属性
事务总是全部支持这四种acid属性的。但是可能会初选一些另外的行为,常叫做‘一致性问题’。他们仅仅可能存在的行为,而用户对于隔离级别的选择决定下列这些行为哪种是被允许的。
Case1
事务A,先执行,处于未提交的状态
事务B,后执行
如果事务B能够读取到(name为lisi)这条记录,事务A就对事务B产生了影响,这个影响叫做“读脏”,读到了未提交事务操作的记录。
Case2
事务A先执行
事务B,后执行,并且提交
事务A,在此执行相同的查询,结果name:zhaosi
这次是已提交事务B对事务A产生的影响,这个影响叫做“不可重复读”(重点为update),一个事务内相同的查询,得到了不同的结果。
Case3
事务A,先执行,1条结果:
事务B,后执行,并且提交;
事务A,在此查询为两条,莫名其妙多出了一条
这次是已提交事务B对事务A产生的影响,这个影响叫做“幻读”。(重点在insert,delete)
为了解决多个事务并发会引发的问题,进行并发控制。数据库提供了四种事务隔离级别供用户选择。