> 文章列表 > 15天学习MySQL计划-事务(基础篇)第五天

15天学习MySQL计划-事务(基础篇)第五天

15天学习MySQL计划-事务(基础篇)第五天

15天学习MySQL计划-事务(基础篇)第五天

事务

1.概述

​ 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

2.命令操作

--当执行下面所有语句,如果中途出现错误,则会出现数据库数据错乱的情况,所以需要一个功能来进行拦截
<--
先查询信息
然后减少张三1000元
李四增加1000-->
select * from accout where name='张三';
update accout set money = money - 1000 where name='张三';
update accout set money = money + 1000 where name='李四';

3.事务操作

1.查看/设置事务提交方式

--查看当前提交的状态
select @@autocommit;
--0代表手动提交  1代表自动提交
set @@autocommit = 0;

2.提交事务

commit;

3.回滚事务

rollback;

4.开启事务

start transactionbegin

4.事务四大特性(ACID)

  • 原子性(atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(consistency):事务完成时,必须使所有数据都保持一致状态。
  • 隔离性(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久化(durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

5.并发事务问题

问题 描述
脏读 一个事务读到另外一个事务还没有提交的数据
不可重复读 一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读
幻读 一个事务按照条件查询数据时,没有对应数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了幻影

6.事务隔离级别

隔离级别 脏读 不可重复读 幻读
read uncommitted 存在 存在 存在
read committed(Oracle) 不存在 存在 存在
repeatable read (MySQL默认) 不存在 不存在 存在
serializable 不存在 不存在 不存在
--查看事务隔离级别
select @@transaction_isolation;
--设置事务隔离级别
set [session|global] transaction isolation level {read uncommitted|read committed | repeatable read | serializable}
解释:
session:只存在当前会话可以使用
global:全局修改

注意:

  • 事务隔离级别越高,数据越安全,但是性能越低

美味小吃