事务

事务的4个条件

  • 原子性(A):事务是最小单位,不可再分
  • 一致性©:事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
  • 隔离性(I):事务A和事务B之间具有隔离性
  • 持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)

在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

事务的操作

1、begin; 开始一个事务

2、rollback; 事务回滚,回到上一个操作

3、commit; 事务确定

set AUTOCOMMIT=0; 禁止自动提交

set AUTOCOMMIT=1; 开启自动提交

提交事务

mysql> start transaction;    #手动开启事务
mysql> insert into t_user(name) values('pp');
	   ......
mysql> commit;    #commit之后即可改变底层数据库数据

回滚事务

mysql> start transaction;
mysql> insert into t_user(name) values('yy');
mysql> rollback;

事务隔离级别

  • 读未提交:read uncommitted 脏读 不可重复读 幻读
  • 读已提交:read committed 不可重复读 幻读
  • 可重复读:repeatable read 幻读
  • 串行化:serializable

设置事务级别

//全局的   
set global transaction isolation level read uncommitted;
//当前会话
set session transaction isolation level read uncommitted;

事务导致的问题

1、脏读

​ 事务a读取了事务b修改但是未提交的数据

2、不可重复度

​ 事务A读取了事务b提交的数据,导致两次读取的数据不一致。

3、幻读

​ 查询一条数据不存在,但是又不可插入。

https://zhuanlan.zhihu.com/p/52677680

https://blog.csdn.net/w_linux/article/details/79666086

posted @ 2021-04-28 14:16  华青少年  阅读(67)  评论(0)    收藏  举报