事务
这两条SQL语句必须全部执行,或者,由于某些原因,如果第一条语句成功,第二条语句失败,就必须全部撤销。
这种把多条语句作为一个整体进行操作的功能,被称为数据库事务。数据库事务可以确保该事务范围内的所有操作都可以全部成功或者全部失败。如果事务失败,那么效果就和没有执行这些SQL一样,不会对数据库数据有任何改动。
可见,数据库事务具有ACID这4个特性:
- C:Consistent,一致性,事务完成后,所有数据的状态都是一致的,即A账户只要减去了100,B账户则必定加上了100;
- D:Duration,持久性,即事务完成后,对数据库数据的修改被持久化存储。
对于单条SQL语句,数据库系统自动将其作为一个事务执行,这种事务被称为隐式事务。
很显然多条SQL语句要想作为一个事务执行,就必须使用显式事务。
是指提交事务,即试图把事务内的所有SQL所做的修改永久保存。如果语句执行失败了,整个事务也会失败。
有些时候,我们希望主动让事务失败,这时,可以用回滚事务,整个事务会失败:
数据库事务是由数据库系统保证的,我们只需要根据业务逻辑使用它就可以。
SQL标准定义了4种隔离级别,分别对应可能出现的数据不一致的情况:
我们会依次介绍4种隔离级别的数据一致性问题。
数据库事务具有ACID特性,用来保证多条SQL的全部执行。