MySQL之事务

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 


开启事务:start transaction;
回滚事务(如果事务提交后,不能够回滚):rollback;
提交事务:commit;

 

事务的4大特性:
1.原子性(automic):同一个事务中多组操作不能够分割,必须是一个整体

2.一致性(consistent):事务操作前与事务操作后总量保持一致

3.隔离性(isolation):多个事务之间互不干扰

  在MySQL中事务有4种隔离级别:read uncommitted(读取未提交的事务)、read committed(读取已提交的事务)、repeatable read(可重复读)、serializable(可序列化的),(级别依次升高,且级别越高对数据库的性能影响越大)

  查看mysql软件中的事务隔离级别:select @@tx_isolation;

  修改mysql软件默认的隔离级别: set global transaction isolation level 隔离级别

    SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

 

 不同的隔离级别会引发不同的问题:

  当mysql的事务隔离级别为read uncommitted时,会导致脏读:一个事务可以读取另一个事务未提交的数据。

  解决方法:将事务隔离级别改为read committed,SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

 

  当mysql软件的事务隔离级别为read committed的时候,会引发不可重复读:在同一事物中多次读取的结果不一致。

  解决方法:将事务隔离级别改为repeatable read,SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;

  改为repeatable read后,若两个事务同时进行,一个事务改变数据,另一个事务查询的数据结果不影响,不改变,仍为改变之前的数据。

 

  当mysql软件的事务隔离级别为repeatable read时,会导致虚读(幻读)

4.持久性(durable):数据一旦进入到库中、表中,就永久存在

posted @ 2018-07-31 18:56  zhwai  阅读(162)  评论(0编辑  收藏  举报