mysql心得分享_MySQL事务的基础学习以及心得分享

本文详细介绍了MySQL事务的四大特性:原子性、一致性、隔离性和持久性,并通过实例展示了事务并发访问可能出现的脏读、不可重复读和幻读问题。接着,探讨了不同隔离级别(读未提交、读已提交、可重复读、串行化)如何解决这些问题,以及它们之间的性能和安全性权衡。最后,给出了MySQL事务的开启、提交和回滚操作。
摘要由CSDN通过智能技术生成

事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务,下面就是关于MySQL事务学习中的心得分享:

事务的特性

1.原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

2.一致性(Consistency):在一个事务中,事务前后数据的完整性必须保持一致,可以想象银行转账、火车购票。

3.隔离性(Isolation):多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

4.持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

写这些概念呢,是有点绕!绕就绕吧!反正也不是我规定的,这是官方的,解释是我编的!!!

事务的并发访问问题

如果我们在不考虑隔离性问题时,事务是存在三种并发访问问题的。

1.脏读:在一个事务中,当读取数据时,读到了另一个事务未提交的数据。

比如A账户给B账户转了1块钱,但是A没有提交事务,被B账户通过脏读看到了,这时,B就会以为A已经把钱转过来了,但是这时,A账户回滚事务。其实钱就没给B转过去,但是B自己本身以为A已经转过去了,,,有点绕,估计是我描述到绕!

看代码:

update account set money=money+1 where name='B'; --此时A去通知B

update account set money=money -1 where name='A';

2.不可重复读:在一个事务中,两次读取的数据内容不一致,这是因为在查询时,有时间间隔,数据被另一个事务已经修改提交了,那就会出现问题。

3.幻读/虚读:在一个事务中,两次读取的数据量不一致。

事务的隔离级别

上面介绍了3种事务并发问题!现在介绍一下数据库提供的解决方案!

1.read uncommitted : 读取尚未提交的数据 :这个最低级,但是效率肯定最高,但是哪一个问题都不能解决。

2.read committed:读取已经提交的数据 :可以解决脏读  。

3.repeatable read:重读读取:可以解决脏读 和 不可重复读 。

4.serializable:串行化:可以解决脏读不可重复读和虚读,效率最差,相当于锁表,开发中一般不用。

上面的“2”是oracle数据库默认设置,“3”是mysql数据库默认的设置。

下面呢我就重点解释一下mysql数据库在上面各种事务隔离级别上的演示:

首先介绍两个语法:

1.查看mysql数据库默认的隔离级别:select @@tx_isolation

如图:

f4e70228facde5242bf9b22ed9df96f2.png

2.设置mysql的隔离级别:set session transaction isolation level 事务的隔离级别

如图:

d5836c41476f3955fceb05df586e2f28.png

事务的隔离级别演示

注意:如果要自己模拟要开启两个mysql客户端,也就是模拟两个用户!

1.read uncommitted

如图:

d5836c41476f3955fceb05df586e2f28.png

我通过语法将数据库的事务隔离级别改为了read uncommitted。

首先我有一张account表。

如图:窗口一

d90ae6f0cdd5c51f3abe6944065bef20.png

窗口二

6271f3ffd7cd2a03c2223d3bbb292709.png

数据库表原始数据money都是5000,当我启动事务后,在zhangsan账户增加了1000和在李四账户减去了1000,但是我的事务还未提交,但是我再次查询数据库表时,数据已经发生变化,这就是脏读和不可重复读!

幻读/虚读我就不掩饰了,同样存在!

2.read committed

如图:

3d2fee548e8c9010e11ca7a76f39baf4.png

我将数据库事务隔离性改为了read committted。

还是上面那张表:

如图:窗口一

db12769fe952d72c699eda477bf9a286.png

窗口二

6e6a9b9655a29ae45a93bc9ce0864cfb.png

数据库表zhangsan账户的money和lisi账户的money都发生了变化,我未提交事务,在另一个窗口事务开启下查询时,没有出现脏读,但是当我提交事务时,在另一个窗口的事务下再次查询,出现了不可重复读的情况,这样可以避免脏读,但是查询时已经出现不可重复读和幻读/虚读!

3.repeatable read

如图:

905ca0faa12b3dbfa4ed4fb289565264.png

我将数据库事务隔离性改为了read committted。

还是上面那张表:

如图:窗口一

81fb6b515c4d9ba00183ef662bc0e471.png

窗口二

7144b75d801fb5eaf2102da919ff0d5e.png

我在两个窗口都开启了事务,当窗口一进行数据操作后,并进行事务提交,在窗口二的事务开启情况下,我去查询,没有查询到刚才窗口一的数据操作记录,这样就避免了脏读和不可重复读。

有人说也避免了虚读/幻读,其实没有。

看图:

b26d08fd85248ef8ac21c1407c05a211.png

我在操作lisi账户时,数据只是发生修改的变化,但是当我修改wangwu这个账户时,再去查询出现了wangwu,账户的数据,但是其实在我未操作前,wangwu账户的数据是查询不出的。这就是幻读/虚读!

如果不理解幻读/虚读这块,可以查一下InnoDB。

4.serializable

我就不演示了,开发不建议用,效率又慢,但是所有的问题都能避免!!

总结一下

事务隔离级别的性能:

read uncommitted>read committed>repeatable read>serialazable

事务隔离级别的安全性:

read uncommitted

mysql 事务控制:

开启事务:start transaction;

提交:commit;

回滚:rollback;

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值