| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MySQL事务讲解 -> 正文阅读 |
|
[大数据]MySQL事务讲解 |
目录 1. 什么是事务
事务(Transaction)是
将?组操作封装成?个执?单元(封装到?起),这?个执?单元要么?起执?成功,要么?起失败,不会出现执?“?半”的情况。
数据库引擎:InnoDB才支持事务,MyISAM不支持事务。
2. 为什么要用事务
以银?转账为例,A 转账 B 转账,那么它的执?流程是这样的:A账户 -500,B账户 +500 。
如果执?了?半,断点了或者程序崩溃了,那么 A 账号的钱就永久消失了,而B也没有收到A转账过来的钱。那怎么办?
?事务就可以解决,封装成?个执?单元,要么?起成功,要么?起失败。
3. 事务怎么用
事务的使?步骤有三个:
????????1. 开启事务(start transaction)。
????????2. 执?多条 SQL。
????????3. 提交/回滚事务(commit/rollback)。
MySQL 8之前使用的是start transaction ,MySQL 8 之后使用的是begin. 注意事项:事务在开启之后,必须以提交事务或者回滚事务来结束。 4. 事务的四大特性
事务有4 ?特性(ACID),原?性、持久性、?致性和隔离性。
① 原?性
原?性是事务最重要的特性,全部执?失败并不是不执?,?是通过逆操作 rollback(回滚)数据。
实现原理:回滚是逆 SQL 操作:?如 A 账户 -
500
元的逆操作就是 A 账户 +
500
元。
② 持久性事务执?完成之后,它所做的所有修改都是永久的(不会丢失)。数据存储到磁盘中就是持久的,不会丢失的,不会因为电脑重启?丢失。 ③ ?致性?个事务在执?前后数据必须保持?种合法的状态,事务总是从?个?致状态到另?个?致状态。
举例说明:?如转账操作,转账之前两个账号的总额是
100
元(各个
50
元),那么两个账户相互转账之后的钱总额也是 100
元,也就是事务总是从?个?致状态到另?个?致状态,不会说转账之前是100 元,相互转账之后变成
80
了,这就不符合?致性了。
④ 隔离性(重要)
多个事务并发访问时,事务之间是相互隔离的,?个事务不应该被其他事务?扰,多个并发事务之间要相互隔离。
MySQL 是支持给每个连接客户端单独设置事务的隔离级别。
? ? ? ? a. 查询事物的隔离级别
?
? ? ? ? b. 设置当前客户端的事务隔离级别
MySQL 事务隔离级别有 4 种:
1. READ UNCOMMITTED:
读未提交,也叫未提交读,该隔离级别的事务可以看到其他事务中未提交的数据。该隔离级别因为可以读取到其他事务中未提交的数据,?未提交的数据可能会发?回滚,因此我们把该级别读取到的数据称之为脏数据,把这个问题称之为脏读。
? 结论:事物的隔离级别:读未提交,存在脏读。
2. READ COMMITTED:
读已提交,也叫提交读,该隔离级别的事务能读取到已经提交事务的数据,因此它不会有脏读问题。但由于在事务的执?中可以读取到其他事务提交的结果,所以在不同时间的相同 SQL 查询中,可能会得到不同的结果,这种现象叫做不可重复读。
结论:读已提交的事务隔离级别可以解决脏读问题,但存在不可重复读的问题。?
3. REPEATABLE READ:
可重复读,是
MySQL 的默认事务隔离级别
,它能确保同?事务多次查询的 结果?致。但也会有新的问题,?如此级别的事务正在执?时,另?个事务成功的插?了某条数 据,但因为它每次查询的结果都是?样的,所以会导致查询不到这条数据,??重复插?时?失败(因为唯?约束的原因)。明明在事务中查询不到这条信息,但??就是插?不进去,这就叫幻读 。
结论:可重复读的事务隔离别可以解决不可重复读的问题,但仍然存在幻读的问题。如果不存在幻读问题,那么无论怎么执行,都不会出现幻象行,也就是不会出现多一条数据的问题。?
(ms)问题:不可重复读和幻读有什么区别?
答:不可重复读和幻读描述的侧重点不同。
不可重复读描述的是修改操作,比如t1时间读取了一行数据,t2时间的时候读取这个数据,内容已经发生改变,这个就是不可重复读。
幻读描述的是幻象行的问题,它是指在t1时间使用一个sql得到了n条数据,而在t2时间使用相同的sql却得到了n + 1条数据,多出来的这条数据就叫幻象行,这个操作就叫做幻读。
即不可重复读描述的侧重点是修改操作,而换队描述的侧重点是添加操作。
4. SERIALIZABLE:
序列化,事务最?隔离级别,它会强制事务排序,使之不会发?冲突,从?解决了脏读、不可重复读和幻读问题,但因为
执?效率低,
所以真正使?的场景并不多。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:30:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |