mysql事务处理
分类:
文章
•
2024-03-16 19:33:22
mysql事务处理
什么是事务
- 在平时的sql操作一般都是以语句的形式来完成的,比如插入一条数据只需要一条insert语句即可,但是事务可以简单的理解成是多条sql语句的集合
- 比如网站的评论功能,我们要做的不是仅仅的插入一条数据到评论表里面就可以,而是在这之后还有很多一系列的事情要完成,比如用户要收到一条新消息,评论数要加1等等
表的引擎

- 数据表都是可选数据引擎的,默认使用的是Innodb引擎,同时这个引擎也是支持事务处理的,所以我们都选择这个引擎即可,如果要修改表的引擎可以使用alter语句:alter table stu engine = “Innodb”
基础语法

- 使用begin或者 star transaction关键字开启一个事务,后面或写的sql语句会被当成一个整体,
- rollback关键字表示回滚,当sql代码出现错误的时候,会回滚停止执行,整个事务停止,而不是除了错误部分的sql停止。
- commit关键字表示同步至所有的客户端
- 只有在关键字begin或transaction和commit关键字之间的sql语句才是事务,关键字之外的sql语句还是属于会立即执行的sql语句,不算事务
设置全局的事务

- 有的公司可能要求我们需要将每个功能都以事务的形式来处理,那么这个时候我们呢只需要使用 set autocommit = 0;这行代码在所有的代码最前面写上就行。
- 事务的原理其实就是不自动提交,这样我们只需要使用commit来一一区分一个事务即可。
事务的隔离等级
- 事务与事务之间的管理我们可以简单的理解成是一个个小房间,隔离等级相当于是小房间隔离的介质,隔离等级高的就像砖块一样,看不见对面的,隔离等级低的就像纱布一样,可以很轻松的看到对象
- 使用select @@tx_isolation;可以查看当前的隔离等级
- 使用set session transaction isolation level 等级名可以设置隔离等级
脏读
- 脏读的是在事务隔离等级最低的read-uncommitted情况下会发函俄国脏读
-

意思就是当一个隔离等级最低的客户端修改但是未提交的数据,另外一个也是隔离等级最低的客户端能够读取到这个未提交的数据,这种情况就被叫做脏读
脏读其实是很影响我们数据的同意的一样读取形式,基本很少用
不可重复读

- 这些都是针对于事务的脏读状态,不可重复读事务可以读取到提交的这个数据,但是读取不到未提交的数据,这种情况叫做不可重复读
可重复读
- 可重复读是隔离等级的第三级,也是mysql中默认的隔离等级
- set session transaction isolation level repeatable read设置可重复读
- 在可重复度的状态下,AB两个事务完全隔离开,无论A事务怎么处理,就算提交了,也不会影响B事务的读出结果。
幻读

- 幻读好比于出现了幻觉,我们查询的时候只能查询到自己事务里面的值可能只有7条,但是我们做一下更新操作的时候,会发现更新的条数是大于7的,那么这种情况就叫做幻读,更新的条数大于查询的条件。
- 使用最高等级的事务隔离等级serializable就能够阻止这种幻读行为。