什么是事物
事务解释:指做成一件事情的一系列操作的总称
事务本质:一系列操作
事务特性:数据库管理系统(DBMS)调度最基本的单位
事物特性
原子性:事物中的一系列操作,一旦其中一个失败,整个一些列操作都需要回滚
一致性:事物执行前后无论成败,都能保证一致性,因为如果成功则数据库会把事物开启到结束所有的更改持久化到数据库,如果失败,则会撤销事物开始到失败过程中的所有操作,从而保证事物的一致性。
隔离性:每个事物之间是隔离的,相互不影响的(这只是理想状态)
持久性:修改后的事物持久化到数据库中
如何终止事物
一般情况下,通过执行COMMIT(提交)或ROLLBACK(回滚)语句来终止事务。当执行COMMIT语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的,即被写入到磁盘,而当执行ROLLBACK语句时,自从事务启动以来对数据库所做的一切更改都会被撤销,并且数据库中内容返回到事务开始之前所处的状态。无论什么情况,在事务完成时,都能保证回到一致性状态。
事物并发
数据库系统(DBS)特点
数据库系统是多用户共享的,即多个用户可以同时操作同一个数据库资源(包括但不限于数据库表中的数据)。
事物并发和并发控制
事物并发就是多个事物同时执行,这就有可能破坏事物的CAID,而并发控制则是正确调度事物,保证事物的隔离性,从而确保数据的一致性,即事物的CAID不被破坏;事物是并发控制的基本单位。
并发造成数据的不一致性
更新丢失
两个事务都同时更新一条数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了,这时候另一个事物修改的数据就丢失了。这个现象是因为系统没有执行任何锁操作,因此并发的事物并没有被隔离开来导致。
脏读
一个事务读取到了另一事务未提交的数据操作结果。这是相当危险的,因为很可能所有的操作都被回滚。
不可重复读(虚度/幻读)
虚读:事务A读取某一条据后,事务B对这条数据做了修改,当事务A再次读取该数据时得到与前一次不同的值。
幻读:事务A在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据或者缺少了第一次查询中出现的数据。这是因为在两次查询过程中有另外一个B事务插入数据造成的。
事物隔离级别
在标准SQL规范中,定义了4个事务隔离级别,来解决上面出现的几种情况,其中,不同的隔离级别对事务的处理不同
读未提交:处理更新丢失
读已提交:处理脏读
可重复读:处理虚读和幻读(不可重复读)
串行化:所有问题