当不控制创建,更新,读取,删除时,会出现什么问题? 【MySQL|MySQL——事务管理】
文章图片
需要在购买后及时更新数据,避免发生错误。
什么是事务? 事务是一组数据库操作语句(DML),一组要么全部成功,要么全部失败。
事务是多个操作构成的实现一个事情的整体。
一个MySQL数据库,肯定不是一个事务在运行,所以当出现冲突时,那些执行一半的sql语句组成的事务,应该怎么办呢?
备注:所以,事务不能单单是sql语句的组合,还需要有以下属性。
sql语句:
- DDL(定义数据库对象,表与列),
- DML(用于操作数据库表中的记录数据),
- DQL(查询数据),
- DCL(定义访问权限和安全级别)
- 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交( Read uncommitted )、读提交( read committed )、可重复读( repeatable read )和串行化( Serializable )
- 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
为什么会出现事务 事务是为了当应用程序访问数据库时,可以简化我们的编程模型。
事务的版本支持 MySQL中只有使用了innodb数据库引擎的数据库或表才支持事务,myisam不支持。
文章图片
事务提交方式 事务提交方式常见的有两种:
- 自动提交
- 手动提交
文章图片
用 SET 来改变 MySQL 的自动提交模式,记得改回来
文章图片
文章图片
事务常见操作方式 创建测试表
文章图片
证明事务的开始和回滚
文章图片
文章图片
事务隔离级别 数据库中,为了保证事务执行过程中不受干扰,就有了隔离性。
数据库中,允许事务受不同程度的干扰,就有了隔离级别。
隔离级别
- 读未提交【Read Uncommitted】: 在该隔离级别,所有的事务都可以看到其他事务没有提交的执行结果。
- 读提交【Read Committed】 :该隔离级别是大多数数据库的默认的隔离级别(不是 MySQL 默认的)。它满足了隔离的简单定义:一个事务只能看到其他的已经提交的事务所做的改变。
- 可重复读【Repeatable Read】: 这是 MySQL 默认的隔离级别,它确保同一个事务,在执行中,多次读取操作数据时,会看到同样的数据行。但是会有幻读问题。
- 串行化【Serializable】: 这是事务的最高隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决了幻读的问题。
查看全局隔离级别
文章图片
查看当前会话全局隔离级别
文章图片
设置当前会话or全局隔离级别语法读未提交
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED |REPEATABLE READ | SERIALIZABLE}
把当前会话隔离级别设置为串行化
文章图片
我们再来看会话隔离级别就发生了变化
文章图片
文章图片
开启事务
文章图片
再开一终端B,通过B访问
文章图片
一个事务在执行中,读到另一个执行中事务的更新(或其他操作)但是未commit的数据,这种现象叫做脏读(dirty read)。
读提交
文章图片
文章图片
可重复读
文章图片
串行化
文章图片
隔离级别对比
文章图片
推荐阅读
- DataBase|Oracle12c安装以及PL/SQL创建用户/表
- 数据库|redis
- 分布式|深度剖析(Redis分布式锁到底安全吗(看完这篇文章彻底懂了!))
- 数据库|Oracle12cWindows安装、介绍及简单使用(图文)
- 算法|挂了腾讯3面,拿到字节四面offer,谈谈我的大厂面经!
- Mysql|MySQL夺命16问,你能坚持到第几问()
- 技术平台&应用开发专题月 | 用友云原生技术平台,拯救”缺芯少魂“在行动
- iuap 助力长久汽车打造“业财一体数字智能化平台”
- 技术平台&应用开发专题月 | 赋能企业业务快速创新,实现云原生自由