MySQL——事务
Posted 名字真的很急用
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL——事务相关的知识,希望对你有一定的参考价值。
事务
-
什么是事务
- 是由一条或者多条sql语句组成, 要么全部成功,要么全部失败(执行回滚)
-
回滚(从哪来的回哪去)
-
在事务运行的过程中发生了某个故障,事务便不再继续执行下去,系统对事物中数据所有已完成的
操作全部撤销,滚回到开始时的状态
-
CREATE TABLE zh(
id INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20),
money DOUBLE
)
INSERT INTO zh VALUES(NULL,'小明',1000);
INSERT INTO zh VALUES(NULL,'小王',1000);
-- 转钱操作
UPDATE zh SET money = money - 500 WHERE id = 1;
系统崩了
UPDATE zh SET money = money + 500 WHERE id = 2;
事务的操作
- 手动提交事务
- 自动的提交事务
手动提交事务的格式
开启事务 | start transation;BEGIN |
---|---|
提交事务 | commit |
回滚事务 | rollback |
START TRANSACTION;
UPDATE zh SET money = money - 500 WHERE id = 1;
崩了
UPDATE zh SET money = money + 500 WHERE id = 2;
SELECT * FROM zh
ROLLBACK
# commit
回滚:事务开启前的状态
取消自动提交
-
SHOW VARIABLES LIKE ‘autocommit’ —查看当前的提交方式
- on :自动提交
- off :手动提交
-
SHOW VARIABLES LIKE 'autocommit' SET @@autocommit = off SELECT * FROM zh INSERT INTO zh VALUES(NULL,"松江",5)
事务的四大特性
特性 | 含义 |
---|---|
原子性 | 每个事务都是一个整体,不可再拆分。事务中所有的sql要么全部执行成功,要么都失败 |
一致性 | 事务在执行前数据库的状态与执行后数据库的状态保持一致; |
隔离性 | 事务和事务之间不应该相互影响,执行时保持隔离状态 |
持久性 | 一旦事务执行成功,对数据库修改是永久的。就算你关机,数据也会保存下来 |
mysql的隔离级别(了解)
数据并发访问
- 一个数据库可能有多个客户端在访问,这些客户端都可以并发方式访问数据库,数据库的相同数据可能被多个事务同时访问,如果我们不对其采用隔离,就会发生各种问题,破坏数据的完整性
数据并发访问产生的问题
并发访问引发的问题 | 含义 |
---|---|
脏读 | 一个事务读取到了另一个事务的尚未提交的数据 |
不可重复读 | 一个事务中两次读取的数据内容不一致 |
幻读 | 一个事务中,某一次的select操作结果所表现得数据状态,无法支撑后续的因为误操作,查询到的数据不准确,导致幻读 |
四种隔离级别
级别 | 名字 | 隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|---|---|
1 | 读未提交 | read uncommitted | 不能 | 不能 | 不能 |
2 | 读已提交 | read committed | 能 | 不能 | 不能 |
3 | 可重复读 | repeatable read | 能 | 能 | 不能 |
4 | 串行化 | serializable | 能 | 能 | 能 |
- 级别效果,执行效率越低
查看隔离级别
SELECT @@tx_isolation
设置隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别
脏读
不可重复读
- 同一个事务中,进行查询操作,每次读取的内容是不一样的
幻读
- select 某记录是否存在,不存在,插入数据,但是执行insert的时候发现记录已经存在,无法插入。
以上是关于MySQL——事务的主要内容,如果未能解决你的问题,请参考以下文章