-- 事务

定义:事务是对数据库的一个操作序列,数据库系统通过一个事务完成一些操作。事务的正确执行会改变数据库的一些状态。

事务还必须遵从ISO/IEC 做制定的acid原则,acid 是集中定性的缩写,分别是:原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability);

原子性:事务不可分割,要么全部执行,要不全部不执行。(如果事务的所有子事务全部提交成功,才会执行成功,如果有子事务执行失败,那么整个事务就会被回滚到之前的状态)

一致性:事务执行后数据库的状态正确的改变。

隔离性:事务之间相互不影响(数据改变不影响)。

持久性:事务的执行,永久保存在数据库中。

事务的作用:
每一个事务的执行,能保证数据库的数据发生正确的改变,并且不相互影响,既保证了操作的可靠性。即使后台出现了异常,也不会影响到破坏数据。

脏读:读到了还没被提交的数据。A事务操作了数据,但还没有提交,B事务中却读到被操作的数据。

不可重复读:一个事务读到2次不同的数据。A事务在读取数据,另一个B事务在操作数据,并发生了改变,提交,此时切换到A事务读到的数据就是B操作后的事务,对于同一个事务而言就是读了2次不同的数据。

幻读:A事务中操作了数据,但在另一个B事务中该数据显示的被A事务修改之前的数据。

 

事务的隔离级别:

分别是:default(默认的) read_encommited(读 未提交) read_commited(读 已提交)  repeatable_read(重复读)  serdserlalizable(串行化)

default:默认的最低级别,相对的维护最低。

read_encommited:能读到还未提交的数据,如此它便不能保证脏读,不重复读,幻读的任何一种。

read_commited:读到已提交的数据,可以保证不会发生脏读,但不能保证重复读和幻读。

repeatable_read:数据读出来都会加个锁,例如: select * from table_name for update; 防止别人修改。加入for update 后只要这个事务不结束,别的事务是不能对这个数据做修改,除非这个事务结束。

serdserlalizable:事务的最高级别,所谓的串行化就是多个事务挨个执行,一个事务执行完了,另个事务才能执行。

事务的级别越高,代表维护的事务的正确性也越高。,也可能影响啊效率,实际应用中多用read_encommited;

 

隔离级别                      脏读      不可重复读       幻读

read_encommited       不能          不能              不能

read_commited            能            不能              不能

repeatable_read          能              能                不能

serdserlalizable           能              能                   能