目录

一、事务的概念和特性

1.概念:

2.特性:

二、MySQL存储引擎

三、执行事务的语法和流程

1.事物的创建

2.注意事项

四、事务的隔离级别

1.事务并发问题是如何产生的?

2事务并发问题:

3.解决办法:


前言: 枯燥的数据库,没有感情的记录软件。来到了第18期Mysql事务,初读这个名字属实不明白这是啥?如果你也有这种想法,那么跟随辉仔的步伐。一起来学习或者复习“事务”!

一、事务的概念和特性

1.概念:

TCL:Transaction Control Language 事务控制语言

一个或一组sql语句组成的一个执行单元,每个MySQL语句相互依赖,这个执行单元要么全部执行,要么全部不执行,如果sql语句一旦执行失败或产生错误,整个单元将回滚。所有受到影响的数据将返回事务开始以前的状态;反之所有sql语句执行成功,则事务被顺利执行。

2.特性:

事务的ACID属性

1.原子性(Atomicity)

原子性指事务是一个不可分割的工作单位。事务的操作要么都发生,要么不发生。

2.一致性(Consistency)

事务必须使数据库从一个一致性状态变换到另一个一致性状态。

3.隔离性(Isolation)

事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。

4.持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变是永久性的,接下来的其他操作和数据可故障不应该对其有任何影响。

二、MySQL存储引擎

小知识:

1、概念:在MySQL中的数据用各种不同的技术存储在文件(或内存)中

2、通过show engines; 来查看mysql支持的存储引擎

3、在mysql中用最多的引擎有:innodb、myisam、memory等。其中innodb支持事务,而myisam、memory等不支持事务。

InnoDB

InnoDB 存储引擎事务主要通过 UNDO 日志和 REDO 日志实现

  • UNDO 日志:复制事务执行前的数据,用于在事务发生异常时回滚数据。
  • REDO 日志:记录在事务执行中,每条对数据进行更新的操作,当事务提交时,该内容将被刷新到磁盘。

三、执行事务的语法和流程

1.事物的创建

隐式的事物:事物没有明显的开启和结束标志

比如:inner、update、delete

delete from 表 where id=1;

显示的事物:事物有明显的开启和结束的标记

前提:必须提前设置自动提交功能禁用

步骤1:开启事务

set autocommit=0;

start transaction; 可选的

步骤2:编写事物中的sql语句(select、insert、update、delete)

语句1;

语句2;

...

步骤3:结束事物

commit;提交事物

Rollback;回滚

实例演示:

示例 1(comit)

下面模拟在张三的账户减少 500 元后,李四的账户还未增加 500 时,有其他会话访问数据表的场景。由于代码需要在两个窗口中执行,为了方便阅读,这里我们称为 A 窗口和 B 窗口。

1) 在 A 窗口中开启一个事务,并更新 mybank 数据库中 bank 表的数据,SQL 语句和运行结果如下:

mysql> USE mybank;
Database changed
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE bank SET currentMoney = currentMoney-500-> WHERE customerName='张三';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

2) 在 B 窗口中查询 bank 数据表中的数据,SQL 语句和运行结果如下:

mysql> SELECT * FROM mybank.bank;
+--------------+--------------+
| customerName | currentMoney |
+--------------+--------------+
| 张三         |      1000.00 |
| 李四         |         1.00 |
+--------------+--------------+
2 rows in set (0.00 sec)

从结果可以看出,虽然 A 窗口中的事务已经更改了 bank 表中的数据,但没有立即更新数据,这时其他会话读取到的仍然是更新前的数据。

3) 在 A 窗口中继续执行事务并提交事务,SQL 语句和运行结果如下:

mysql> UPDATE bank SET currentMoney = currentMoney+500-> WHERE customerName='李四';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> COMMIT;
Query OK, 0 rows affected (0.07 sec)

4) 在 B 窗口中再次查询 bank 数据表的数据,SQL 语句和运行结果如下:

mysql> SELECT * FROM mybank.bank;
+--------------+--------------+
| customerName | currentMoney |
+--------------+--------------+
| 张三         |       500.00 |
| 李四         |       501.00 |
+--------------+--------------+
2 rows in set (0.00 sec)

在 A 窗口中执行 COMMIT 提交事务后,对数据所做的更新将一起提交,其他会话读取到的是更新后的数据。从结果可以看出张三和李四的总账户余额和转账前保持一致,这样数据从一个一致性状态更新到另一个一致性状态。

实例2:(rollback)

将张三的账户余额减少 1000 元,并让事务回滚,SQL 语句和运行结果如下所示:

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)mysql> UPDATE bank SET currentMoney = currentMoney-1000 WHERE customerName='张三';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> ROLLBACK;
Query OK, 0 rows affected (0.07 sec)mysql> SELECT * FROM mybank.bank;
+--------------+--------------+
| customerName | currentMoney |
+--------------+--------------+
| 张三         |       500.00 |
| 李四         |       501.00 |
+--------------+--------------+
2 rows in set (0.00 sec)

从结果可以看出,执行事务回滚后,账户数据恢复到初始状态,即该事务执行之前的状态。


带有Savepoint:保存点

步骤1:开启事务

set autocommit=0;

start transaction; 可选的

步骤2:编写事物中的sql语句(select、insert、update、delete)

语句1;

Savepoint保存点+节点名用于 语句1改变,之后的回滚不改变

语句2;

...

步骤3:结束事物

Rollback to 节点名;回滚

2.注意事项

MySQL 事务是一项非常消耗资源的功能,大家在使用过程中要注意以下几点。

1) 事务尽可能简短

事务的开启到结束会在数据库管理系统中保留大量资源,以保证事务的原子性、一致性、隔离性和持久性。如果在多用户系统中,较大的事务将会占用系统的大量资源,使得系统不堪重负,会影响软件的运行性能,甚至导致系统崩溃。

2) 事务中访问的数据量尽量最少

当并发执行事务处理时,事务操作的数据量越少,事务之间对相同数据的操作就越少。

3) 查询数据时尽量不要使用事务

对数据进行浏览查询操作并不会更新数据库的数据,因此应尽量不使用事务查询数据,避免占用过量的系统资源。

4) 在事务处理过程中尽量不要出现等待用户输入的操作

在处理事务的过程中,如果需要等待用户输入数据,那么事务会长时间地占用资源,有可能造成系统阻塞。


四、事务的隔离级别

1.事务并发问题是如何产生的?

- 当多个事务同时操作同一个数据库的相同数据时

2事务并发问题:

1.脏读:对于两个事务T1,T2。T1读取了已经被T2更新但还没有提交的字段,之后,若T2回滚,T1读取的内容就是临时无效。

2.不可重复读:对于两个事务T1和T2。T1读取了一个字段,然后T2更新了该字段,之后,T1再次读取同一个字段,值就不同了。

3.幻读:对于两个事务T1,T2。T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行,之后,T1再次读取同一个表,就会多出几行。

3.解决办法:

4种事务隔离级别:

* 处理事务并发问题,设置事务隔离级别

- READ UNCOMMITTED

- READ COMMITTED:可以避免脏读

- REPEATABLE READ:可以避免脏读、不可重复读和一部分幻读

- SERIALIZABLE:可以避免脏读、不可重复读和幻读

* 注意:隔离级别从小到大安全性越来越高,但是效率越来越低

* 设置隔离级别

- set session|global  transaction isolation level 隔离级别名;

* 查看隔离级别

- select @@tx_isolation;

点赞是对博主最大的支持!!!

辉仔日记之学代码第十八期——Mysql事务相关推荐

  1. 辉仔日记之学代码第十五期——IO流图书管理系统

    嚯嚯嚯!今天也是写日记的一天啦! 温故而知新,完成了一个项目,及时总结才能继续成长!在写图书管理系统想过放弃,因为太多要注意的点,各种各样的问题.重打了很多的代码,几乎是推到重来!功夫不负有心人,果然 ...

  2. 辉仔日记之学代码第十一期——集合来开会

    目录 一.Collection是个单列集合 1.集合的Iteratoriterator遍历方法 二.Collection的子类Set接口 1.Set集合的特点 2.Set集合最常用的HashSet 3 ...

  3. 辉仔日记之学代码第二十一期——单例模式

    单例模式的定义 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式. 单例模式有 3 个特点 单例类只有一个实例对象: 该单例对象必须由单例类自行创建: 单 ...

  4. 辉仔日记之学代码第三期——家庭收支小程序

    目录 标题1:操作主流程 标题2:主菜单 标题3:选项1 标题4:选项2 标题5:选项3 标题6:回到选项1 标题7:选项4 标题8:总结 前言::时隔一天我又回来啦,今天的任务只是编写一个超难超难的 ...

  5. 辉仔日记之学代码第八期——葫芦娃原来是多态!

    目录 一.多态小故事 二.走进多态 1.多态继承的三个必要条件 三.具体多态 四.抽象类多态 1.认识抽象类: 2.抽象类的特点: 五.接口类多态 1.认识接口 2.接口类的特点 前言:多态,顾名思义 ...

  6. 小白学JAVA之十八——泛型

    小白学JAVA之十八--泛型 一. 基本概念 通常情况下集合中可以存放不同类型的对象,是因为将所有对象都看做Object类型放入的,因此从集合中取出元素时也是Object类型,为了表达该元素真实的数据 ...

  7. 发布 项目_第十八期科创基金项目发布会圆满结束

    第十八期科创基金项目发布会圆满结束 贺电!贺电! 电子信息工程学院发来贺电:第十八届科创基金项目发布会圆满结束啦!感谢导师们的支持.现场同学的热情参与和科协朋友后勤服务! NUAA 即使是寒冷的冬天也 ...

  8. FME模板兴趣班第十八期(面遮挡处理) 任务小结

    班长欣欣 一.题目说明 对面进行遮挡处理,处理要求如下: 多个面之间存在压盖,要求压盖区域用Level高的遮挡Level低的,并将压盖区域从Level低的面中擦除.如下图所示: 面1.面2.面3 的L ...

  9. COS访谈第十八期:陈天奇

    COS访谈第十八期:陈天奇 [COS编辑部按] 受访者:陈天奇      采访者:何通   编辑:王小宁 简介:陈天奇,华盛顿大学计算机系博士生,研究方向为大规模机器学习.他曾获得KDD CUP 20 ...

最新文章

  1. php自动生成新闻页,自动发布新闻页面的php代码
  2. 201903-2二十四点
  3. 智能音箱 之 音频通路质量--测试与参数
  4. mysql select null 0,查询值中为NULL,在MySQL中产生0.00
  5. 配置Apacheserver
  6. Discuz!NT CreditsOperationType
  7. 贝塔斯曼龙宇:李斌能征善战 提前七年兑现了自己的承诺
  8. 雷蛇灯光配置文件_突破极限!Razer雷蛇发布高性能V2版炼狱蝰蛇和巴塞利斯蛇...
  9. 由WPS 2005想到的
  10. 你的MP3中不能缺少的231首歌
  11. php中column函数,PHP array_column() 函数用法及示例
  12. 青蛙的约会(扩展欧几里德)
  13. 已拿头条offer的研发工程师面经(C++)
  14. 写给通信人的“失业”生存指南
  15. (翻译)表单中应使用文本域输入地址的原因
  16. 近视眼学计算机好吗6,怎么会加重眼睛的近视,近视加重与6个原因有关
  17. 51job爬虫-xpath
  18. 解决复杂问题的思路-排除法
  19. 评测三款高颜值的txt阅读器(ios手机适用)
  20. 瑞士PORTESCAP行星式齿轮箱R22HT

热门文章

  1. 汇编语言C大调电子琴程序,汇编语言编写电子琴的程序.doc
  2. 解释Kullback-Leibler散度
  3. 重磅微生物新技术分享 | 高通量微生物单细胞基因组技术2bRAD-M简化宏基因组技术...
  4. fake计算机英语,除了用Fake表达“假的”,这10个英语表达更高级!
  5. 看这里!考研调剂全流程指导!
  6. seetaface6JNI ,windows和linux环境自适应,支持GPU
  7. 抓取西刺代理,并构建自己的代理池
  8. linux - inux查看与设定别名
  9. 没有备份的视频怎么恢复?视频丢失如何恢复
  10. 数据库——SQL 下