Mysql事务、事务并发及、事务隔离

    xiaoxiao2021-03-25  136

    一、什么是事务

    1、事务概念: 事务是包含了一组有序的数据库操作命令的序列,它是数据库并发操作的最小控制单位。

    2、事务特性:

    原子性:事务包含的数据库操作命令要么都执行,要么都不执行。一致性:当事务完成时,数据库处于稳定而一致的状态。即事务执行后,数据库数据要符合规定,而且所有数据查询的结果是一致的。隔离性:多个事务同时执行时,他们之间是互不干扰的。永久性:一旦事务提交成功,它引发的变化也就永久保存了下来,硬件与应用程序发生错误也不能改变。

    3、事务操作命令:

    二、事务并发的问题

    1、丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖(事务A和B并发执行,A事务执行更新后,提交;B事务在A事务更新后,B事务结束前也做了对该行数据的更新操作,然后回滚,则两次更新操作都丢失了)。

    2、脏读:一个事务读到另一个事务未提交的更新数据(事务A和B并发执行,B事务执行更新后,A事务查询B事务没有提交的数据,B事务回滚,则A事务得到的数据不是数据库中的真实数据。也就是脏数据,即和数据库中不一致的数据)。

    3、不可重复读:一个事务读到另一个事务已提交的更新数据(事务A和B事务并发执行,A事务查询数据,然后B事务更新该数据,A再次查询该数据时,发现该数据变化了)。

    4、覆盖更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据(即A事务更新数据,然后B事务更新该数据,A事务查询发现自己更新的数据变了)。

    5、虚读(幻读):一个事务读到另一个事务已提交的新插入的数据(A和B事务并发执行,A事务查询数据,B事务插入或者删除数据,A事务再次查询发现结果集中有以前没有的数据或者以前有的数据消失了)。

    三、四种事务隔离级别

    1、Serializable(串行化):一个事务在执行过程中完全看不到其他事务对数据库所做的更新(事务执行的时候不允许别的事务并发执行。事务串行化执行,事务只能一个接着一个地执行,而不能并发执行。)。

    2、Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他其他事务对已有记录的更新。

    3、Read Commited(读已提交数据):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,而且能看到其他事务已经提交的对已有记录的更新。

    4、Read Uncommitted(读未提交数据):一个事务在执行过程中可以看到其他事务没有提交的新插入的记录,而且能看到其他事务没有提交的对已有记录的更新。

    -丢失更新脏读非重复读覆盖更新幻像读未提交读√√√√√已提交读×××√√可重复读××××√串行化×××××

    四、查看/修改隔离级别

    MYSQL默认隔离级别是:Repeatable reat如何查看/修改隔离级别? 查看:select @@GLOBAL.tx_isolation, @@session.tx_isolation; 修改:set session transaction isolation level repeatable read; #repeatable read 可修改成 serializable等
    转载请注明原文地址: https://ju.6miu.com/read-5685.html

    最新回复(0)