-
mysql事务
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}
人生没有白走的路,每一步都算数
恐惧是万恶之源
-
相关阅读:
福大软工 · 第十二次作业
Beta 冲刺(7/7)
Beta 冲刺(6/7)
Beta 冲刺(5/7)
Beta 冲刺(4/7)
Beta 冲刺(3/7)
Beta 冲刺(2/7)
福大软工 · 第十次作业
Beta 冲刺(1/7)
64位 CentOS NDK 编译 FFMPEG
-
原文地址:https://www.cnblogs.com/niusha/p/10482026.html
Copyright © 2020-2023
润新知