(1)事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这组数据库命令要么都执行,要么都不执行。
(2)事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。
(3)多用户同时操作的数据库系统的场景,如银行、保险公司和证券交易系统等等,适用于事务处理。 (4)事务通过事务的整体性以保证数据的一致性。
注:ACID,是指在可靠数据库管理系统 (DBMS) 中,事务 (transaction) 应该具有的四个特性:原子性 (Atomicity) 、一致性 (Consistency )、隔离性 (Isolation) 、持久性 (Durability) 。这是可靠数据库所应具备的几个特性。
(1)事务具有原子性,也就是说,事务中的操作要么全部执行,要么全部不执行,不可分割。 a、事务是一个完整的操作,事务的各元素是不可分的。
b、事务中的所有元素必须作为一个整体提交或回滚。
c、如果事务中的任何元素失败,则整个事务将失败。
(2)一致性:指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
a、当事务完成时,数据必须处于一致状态。
b、在事务开始前,数据库中存储的数据处于一致状态。
c、在正在进行的事务中,数据可能处于不一致的状态。
d、当事务成功完成时,数据必须再次回到已知的一致状态。
(3)隔离性:当多个事务同时操作相同的数据时,在并发环境中,每个事务都能够使用它自己独立的完整数据区域。 对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。 修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一-个使用相同数据的事务结束之后访问这些数据。
(4)持久性:在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
a、指不管系统是否发生故障,事务处理的结果都是永久的。
b、一旦事务被提交,事务的效果会被永久地保留在数据库中。
总结:在事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是结果。
(1)、脏读:一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的。
在一个事务中连续执行两个相同的查询,却得到了不同的结果,这种情况被称为不可重复读。这是由于查询时系统中其他事务修改的提交而引起的。
重新叙述:幻读是指当一个事务修改了一个表中的某些数据行,但是另一个事务同时插入了几行新数据,导致第一个事务查询时发现多了几行数据。同时有另一个事务对该表进行了修改,并插入了一行新数据。操作前一个事务的用户会惊奇地发现表中仍有未修改的数据行,就像出现了幻觉一样。
(4)、丢失更新:两个事务同时读取同一条记录,A先修改记录,B也修改记录 (B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。
(1) 、read uncommitted:读取尚未提交的数据,不解决脏读
(2)、 read committed:读取己经提交的数据,可以解决脏读
(3)、 repeatable read:重读读取,可以解决脏读和不可重复读-------------mysql默认
(4)、 serializable:串行化,可以解决脏读不可重复读和虚读----------------相当于锁表 注:mysql 默认的事务处理级别是 repeatable read,而 Oracle 和 SQL Server 是 read committed
show global variables like '%isolation%'; 或 select @@global.tx_isolation;