前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >11.MySQL事务(必考要点)

11.MySQL事务(必考要点)

作者头像
小雨的分享社区
发布2022-10-26 15:17:41
1080
发布2022-10-26 15:17:41
举报
文章被收录于专栏:小雨的CSDN小雨的CSDN

1.事务的概念

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。

在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。

2.事务的特性(ACID)

1)原子性:事务中的若干个操作只有两种结果,全部成功和全部失败(“全部失败”不是指全部步骤都失败了,而是一旦中间某个步骤执行出错,就把前面已经执行完毕的步骤回滚回去)

2)一致性:执行事务前后,事务始终处于合法的状态(例如转账时,减余额账户时,不能减成负的)

3)持久性:事务一旦执行完毕,此时对于数据的修改是持久生效的(写入磁盘了)

4)隔离性:并发执行多个事务,事物之间不能相互干扰 (隔离是为了保证数据的准确,并发是为了提高事务执行的效率; 如果多个事物之间隔离性越强,并发程度就越低,效率就越低 如果多个事物之间隔离性越弱,并发程度就越高,效率就越高)

并发执行事务时,产生的问题 1.脏读: 如果一个事务正在准备修改数据,还没提交呢,另外一个事务读取了这里即将被修改的内容

*****解决脏读的办法:给写操作加上锁(也就是写的时候不允许另外一个事务读,如果读就会阻塞,也就是写的时候不能读,读的时候可以写,不能等同于synchronized)

引入写加锁,并发程度低了,效率低了,隔离性就提高了

2.不可重复读: 一个事务A执行过程中,两次读取到的数据不相同就叫不可重复读

*****解决方案:读和写都要加锁(也就是读的时候不能写,写的时候不能读)

再引入读加锁,并发程度更低了,效率更低了,隔离性就又提高了

3.幻读: 在读的时候,虽然在指定类中加了锁,但是其他的类是可以修改的,也就会导致最后读到的结果集不一样(同一事物中,两次读到的结果集不一样)

*****解决方案:必须严格的串行化执行

MySQL隔离级别 1.read uncommitted:允许读取未提交的数据(隔离程度最低,并发性最高,会有脏读的问题) 2.read committed:只允许读取已经提交的数据,相当于写加锁(隔离性提高了一些,并发性降低了一些,解决了脏读,但是会有不可重读的问题) 3.repeatable read(MySQL的默认隔离级别):给读也加锁(隔离性有提高了,并发性有降低了,解决了不可重复读,但是会有幻读的问题) 4.serializable:严格串行化执行(隔离性最高,并发最低,解决了幻读的问题)

3.事务的使用

(1)开启事务:start transaction; (2)执行多条SQL语句 (3)回滚或提交:rollback/commit; 说明:rollback即是全部失败,commit即是全部成功。

代码语言:javascript
复制
start transaction;
-- 阿里巴巴账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';
-- 四十大盗账户增加2000
update accout set money=money+2000 where name = '四十大盗';
commit;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.事务的概念
  • 2.事务的特性(ACID)
  • 3.事务的使用
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档