MySQL数据库之事务
目录
基本概念
mysql中,事务其实是一个最小的不可分割的工作单元。事务能够保证一个业务的完整性。
事务的四大特征(ACID):
- A 原子性:事务是最小的单位,不可以在分割。
- C 一致性:事务要求,同一事务中的 sql 语句,必须保证同时成功或者同时失败。
- I 隔离性:事务1 和 事务2 之间是具有隔离性的。
- D 持久性:事务一旦结束(commit,rollback),就不可以返回。
基本操作
-
事务开启:
- 修改默认提交
set autocommit=0; begin;start transaction;
- 修改默认提交
-
事务手动提交:
commit; -
事务手动回滚:
rollback;
事务的隔离性
类别
- read uncommitted; 读未提交的 如果有事务a,和事务b,a事务对数据进行操作,在操作的过程中,事务没有被提交,但是b可以看见a操作的结果。 一个事务读到了另外一个事务没有提交的数据,就叫做脏读。
- read committed; 读已经提交的 虽然我只能读到另外一个事务提交的数据,但还是会出现问题,就是读取同一个表的数据,发现前后不一致。
- repeatable read; 可以重复读 事务a和事务b 同时操作一张表,事务a提交的数据,也不能被事务b读到,就可以造成幻读。
- serializable; 串行化 串行化问题是,性能特差!!!
相关操作
- 查看数据库的隔离级别
- 系统级别的
select @@global.transaction_isolation; - 会话级别的
select @@transaction_isolation; - mysql 默认隔离级别 REPEATABLE-READ
- 系统级别的
- 修改隔离级别
set global transaction isolation level read uncommitted;
- 对比
- 隔离级别越高,性能越差: READ-UNCOMMITTED > READ-COMMITTED > REPEATABLE-READ > SERIALIZABLE;
- mysql 默认隔离级别是 REPEATABLE-READ
- 实际开发中,一般都是使用默认,但是幻读问题我们需要解决!