mysql事务

拜拜、爱过 提交于 2021-02-14 12:15:31

###1.事务的理解: ####事务就是一段sql的批处理,考虑到现在的很多程序或软件都是多线程的,对于同一个表可能同时有多个人在操作,为了保持数据的一致性,我们提出这个事务 ###2.事务的四大特性(ACID): ####1)原子性:一个事务必须视为一个不可分割的最小工作单元,这个事务的操作要么全部提交成功,要么全部失败回滚 ####2)一致性:数据库总数从一个一致性的状态转换到另一个一致性的状态 ####3)隔离性:一个事务在进行修改等操作时,对于其他事务来说是不可见的,也就是说其他事务不能与这个事务同时进行修改 ####4)持久性:一个事务操作完成一旦提交之后,对数据库的修改就是持久的,不能再后悔回滚的 ###3.事务的操作 ####1)开启事务:begin ####2)执行对数据的操作,如修改删除等 ####3)确认操作提交:commit ####4)回滚操作:rollback在确认提交之前我们可以在后悔回滚,但是一旦事务提交之后就不能再回滚了 ###4.事务的隔离级别 ####在介绍隔离级别之前我们需要先搞清楚几个概念 ####1)脏读:脏读指的是现在有a,b两个事务,b对数据进行了修改但是还未提交,这个时候a对这个数据进行了查询,查到的时b修改后的数据,这个时候b后悔回滚了,数据又恢复到之前的数据,那么a读到的数据就是脏的 ####2)不可重复读:事务a重复读取一个数据,在这个事务还没有结束之前,事务b对这个数据进行了修改并且进行了提交,这个时候a接着读,读到的是b修改的数据,这样就造成了a前后读的数据不一致,这叫不可重复读 ####3)幻读:a事务对数据表总的所有数据进行修改,这个事务还没进行完的时候,b事务又向这个表中插入一条数据,这个时候a事务发现这个表中还有没被修改的数据,就好像产生幻觉一样,这个就是幻读 ####注:这里不可重复读与幻读容易混淆,不可重复读强调的是修改数据,二幻读更注重插入或者删除数据 ####事务有四个隔离级别,如下面表格所示 隔离级别|脏读|不可重复读|幻读 --|:--:|:--:|--: 读未提交|是|是|是 读已提交|否|是|是 可重复读|否|否|是 串行化|否|否|否 ####上面的隔离级别是依次增强的,也就是说串行化的隔离级别是最强的,但是我们通常不会用到他,当我们使用串行化的隔离级别的时候,三种情况都不会发生,读未提交是最低的隔离级别,当我们选择这种隔离级别的时候,这三种情况都会发生.mysql默认的隔离级别是可重复读 ####查询事务的隔离级别 ####1)查询全局的隔离级别select @@global.tx_isolation ####2)查询会话的隔离级别select @@tx_isolation ####修改事务的隔离级别 ####SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!