MySQL数据库基础知识(五)《事务》

学习目标:

  • 掌握数据库操作中事务的基础知识


学习内容:

1.事务简介

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

2.事务操作

  • 查看/设置事务提交方式、开启事务
-- 查看事务/设置事务提交方式
select @@autocommit;
set @@autocommit=0;

-- 开启事务(此方法可不更改提交方式为手动)2种语句
start transaction ;-- 1
begin ;-- 2
  • 提交事务
commit;
  • 回滚事务
rollback;

3.事务四大特性

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

4.并发事务问题

  • 事务A在改变了数据库中的值后,还未提交(commit),事务B在查询数据时,查询到的是事务A改变之后的数据,这种情况为脏读。

  • 事务A在开启事务后先查询了一次数据,显示结果为1;之后事务B改变了数据库中的数据并提交,此时事务A还未结束事务,在事务A再次查询数据,结果为2;而事务A两次查询的结果1与2不一致,这种情况为不可重复读。

  • 事务A在开启事务后,事务B插入指定值数据并提交;在事务A第一次查询该指定值数据,查询结果为空,然后事务A插入指定值数据,但运行结果提示数据已存在;事务A再次查询该指定值数据,查询结果依旧为空,这种情况称为幻读。

5.事务隔离级别

为了解决事务并发带来的问题

√代表会出现的情况,×代表该级别不会出现的问题

级别从上到下安全性能越来越高,但效率越来越低

演示(打开两个cmd窗口分别操作):

  • read uncommitted模式下:

未提交

  • read committed模式下:

未提交

提交后:

  • repeatable模式下:

右侧修改并提交后,左侧在事务内依旧查询更改提交前的数据

但是在插入数据时,左侧事务查询不到id=3的数据,但是插入id=3的数据报错

  • serializable模式下,插入新实例,需要在另一事务已经提交后才可操作完成,否则运行光标会一直闪动直到另一事务停止。


学习时间:

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点

学习产出:

  • 技术笔记 2 遍
  • CSDN 技术博客 2 篇
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值