文章目录

  • 前言
  • 事务
  • 什么是事务
  • 事务的3大范式
  • 事务的三大特点
    • 原子性(Atomicity)
    • 一致性(Consistency)
    • 隔离性(Isolation)
    • 持久性(Durability)
  • 控制事务的命令
    • 事务的控制方法
    • 如何存档
    • 使用事务命令(回滚)
    • 使用set设置控制事务
    • SAVEPOINT 语法
  • 存储引擎
    • 什么是存储引擎
    • MyISAM介绍
    • MyISAM有什么特点
    • 什么生产场景适合使用MyISAM
    • InnoDB介绍
    • InnoDB有什么特点
    • 什么生产场景适合使用InnoDB
    • 企业生产环境中依据什么选择存储引擎
  • 如何修改存储引擎

前言

事务

什么是事务

  • 事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行(银行转账;提交转账-确认转账-回馈信息)
  • 事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元(银行减钱增前是不可以分割的总和不变)
  • 适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等
  • 通过事务的整体性以保证数据的一致性
  • 如果事务成功了一部分,一部分未成功,则执行回滚,回到事务的起点,重新开始操作

事务的3大范式

确保每列保持原子性

确保表中的每列都和主键相关

确保每列都和主键直接相关,而不是间接相关

事务的三大特点

原子性(Atomicity)

  • 事务是一个完整的操作,事务的各元素是不可分的(原子的)

  • 事务中的所有元素必须作为一个整体提交或回滚

  • 如果事务中的任何元素失败,则整个事务将失败

    银行转出和转进是一起的不会单独

一致性(Consistency)

  • 当事务完成时,数据必须处于一致状态!

  • 在事务开始之前,数据库中存储的数据处于一致状态;

  • 在正在进行的事务中,数据可能处于不一致的状态;

  • 当事y务成功完成时,数据必须再次回到已知的一致状态

    银行转账转账前是一致,的转账中不一致,转账后一致

    隔离性(Isolation)

    • 对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
    • 修改数据的事务可以在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据

    举例子:

    a转账给b, b转账给c, a不会转给c这就是隔离

持久性(Durability)

  • 事务持久性指不管系统是否发生故障,事务处理的结果都是永久的
  • 一旦事务被提交,事务的效果会被永久地保留在数据库中

控制事务的命令

事务控制语句

BEGIN或START TRANSACTION ===>表示事务的开始
COMMIT                   ===>提交
ROLLBACK                 ===>回滚
SAVEPOINT 存档点名称      ===>设置断点,存档点
RELEASE SAVEPOINT 存档点名称===>释放存档点
ROLLBACK TO 存档点名称    ===>回滚到某个存档点
SET TRANSACTION          ===>设置事务

事务的控制方法

  • 使用事务处理命令控制事务

    • bein:开始一个事务
    • commit:提交一个事务
    • rollback:回滚一个事务(跳转到bein状态)
  • 使用set命令进行控制
    • set autocommit=0:禁止自动提交
    • set autocommit=1:开启自动提交

如何存档

格式:
savepoint <存档点名称>;
例如:
savepoint s1;

使用事务命令(回滚)

  • bein:开始一个事务
  • commit:提交一个事务
  • rollback:回滚一个事务(跳转到bein状态)

往数据表中插入一条数据一个在事务中提交,执行操作语句必须使用commit,否则事务不可以自动提交

mysql> begin;
mysql> insert into info value('5','UI');
mysql> select * from info;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | 云计算       |
|  2 | 大数据       |
|  3 | 人工智能     |
|  4 | 区块链       |
|  5 | UI           |
+----+--------------+
mysql> rollback;
mysql> select * from info; 再次查看记录发现已经没有了
+----+--------------+
| id | name         |
+----+--------------+
|  1 | 云计算       |
|  2 | 大数据       |
|  3 | 人工智能     |
|  4 | 区块链       |
+----+--------------+

使用set设置控制事务

  • set autocommit=0:禁止自动提交
  • set autocommit=1:开启自动提交
mysql> set autocommit=0;   禁止提交
mysql> insert into info (name,score,address) values ('wamgwu',80,'nj');   //插入一条语句
mysql> select * from info;     // 查看一下
+----+----------+-------+---------+
| id | name     | score | address |
+----+----------+-------+---------+
|  1 | zhangsan | 80.00 | nj      |
|  2 | lisi     | 80.00 | nj      |
|  3 | wamgwu   | 80.00 | nj      |
+----+----------+-------+---------+
mysql> rollback;          //执行回滚命令,再查看表先前插入的命令已经没有了
mysql> select * from info;
+----+----------+-------+---------+
| id | name     | score | address |
+----+----------+-------+---------+
|  1 | zhangsan | 80.00 | nj      |
|  2 | lisi     | 80.00 | nj      |
+----+----------+-------+---------+

SAVEPOINT 语法

SAVEPOINT 通过自定义的名称设置一个存储点,如果当前事务已经有了一个同名的

savepoint 结点名;(回到上一档下一档的数据全部消失,rollback也意味着结束,必须是innodb引擎)

mysql> begin;
mysql> insert into info (name,score,address) values ('wangwu',80,'bieji');  插入记录
mysql> select * from info;
+----+----------+-------+---------+
| id | name     | score | address |
+----+----------+-------+---------+
|  1 | zhangsan | 80.00 | nj      |
|  2 | lisi     | 80.00 | nj      |
|  4 | wangwu   | 80.00 | bieji   |
+----+----------+-------+---------+
mysql> savepoint a; 保存点a
mysql> insert into info (name,score,address) values ('tianshan',80,'bieji');
mysql> savepoint b; 保存点b
mysql> insert into info (name,score,address) values ('heishang',80,'bieji');
mysql> rollback to b; 回到保存b
mysql> select * from info;
+----+----------+-------+---------+
| id | name     | score | address |
+----+----------+-------+---------+
|  1 | zhangsan | 80.00 | nj      |
|  2 | lisi     | 80.00 | nj      |
|  4 | wangwu   | 80.00 | bieji   |
|  5 | tianshan | 80.00 | bieji   |
|  6 | heishang | 80.00 | bieji   |
+----+----------+-------+---------+
mysql> rollback to a;  回到保存a
mysql> select * from info;
+----+----------+-------+---------+
| id | name     | score | address |
+----+----------+-------+---------+
|  1 | zhangsan | 80.00 | nj      |
|  2 | lisi     | 80.00 | nj      |
|  4 | wangwu   | 80.00 | bieji   |
+----+----------+-------+---------+

结束事务3种方法

  • commit;
  • set autocommit=1;
  • rollback;

存储引擎

什么是存储引擎

  1. MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在 MySQL中称为存储引擎
  2. 储引擎就是 MySQL将数据存储在文件系统中的存储方式或者存储格式
  3. 目前 MySQL常用的两种存储引擎
    • MyISAM(不支持事务)
    • InnoDB(支持事务)

MyISAM介绍

  • MyISAM存储引擎是 MySQL关系数据库系统5.5版本之前默认的存储引擎,前身是ISAM

  • ISAM是一个定义明确且历经时间考验的数据表格管理方法,在设计之时就考虑到数据库被查询的次数要远大于更新的次数

  • ISAM的特点

    • 优点:ISAM执行读取操作的速度很快
    • 缺点:不支持事务处理
    • 缺点:不能够容错
    • 对事物没有完整的要求

MyISAM有什么特点

  • 不支持事务
  • 表级锁定形式,数据在更新时锁定整个表
  • 数据库在读写过程中相互阻塞
    • 会在数据写入的过程阻塞用户数据的读取
    • 也会在数据读取的过程中阻塞用户的数据写入
  • 每个 MyISAM在磁盘上存储成三个文件,每一个文件的名字以表的名字开始,扩展名指出文件类型
  • MyISAM在磁盘上存储的文件
    • .frm文件存储表定义
    • 数据文件的扩展名为.MYD( MYData)
    • 索引文件的扩展名是.MYI( MYIndex)

什么生产场景适合使用MyISAM

  • 公司业务不需要事务的支持
  • 一般单方面读取数据比较多的业务,或单方面写入数据比较多的业务
  • MyISAM存储引擎数据读写都比较频繁场景不适合
  • 使用读写并发访问相对较低的业务
  • 数据修改相对较少的业务
  • 对数据业务一致性要求不是非常高的业务
  • 服务器硬件资源相对比较差

InnoDB介绍

InnoDB有什么特点

  • 支持事务:支持4个事务隔离级别
  • 行级锁定,但是全表扫描仍然会是表级锁定
  • 读写阻塞与事务隔离级别相关
  • 具有非常高效的缓存特性:能缓存索引,也能缓存数据
  • 表与主键以簇的方式存储
  • 支持分区、表空间,类似 oracle数据库
  • 支持外键约束,5.5以前不支持全文索引,5.5版本以后支持全文索引
  • 对硬件资源要求还是比较高的场合

什么生产场景适合使用InnoDB

  • 业务需要事务的支持
  • 行级锁定对高并发有很好的适应能力,但需确保查询是通过索引来完成
  • 业务数据更新较为频繁的场景,如:论坛,微博等
  • 业务数据一致性要求较高,例如:银行业务
  • 硬件设备内存较大,利用 Innodb较好的缓存能力来提高内存利用率,减少磁盘I/O的压力

企业生产环境中依据什么选择存储引擎

  • 需要考虑毎个存儲引擎提供了哪些不同的核心功能及应用场景

  • 支持的字段和数据类型
    ●所有引擎都支持通用的数据类型
    ●但不是所有的引擎都支持其它的字段类型,如二进制对象

  • 锁定类型:不同的存储引擎支持不同级别的锁定
    ●表锁定
    ●行锁定

  • 索引的支持
    ●建立索引在搜索和恢复数据库中的数据的时候能够显著提高性能
    ●不同的存储引擎提供不同的制作索引的技术
    ●有些存储引擎根本不支持索引

  • 事务处理的支持

    ●事务处理功能通过提供在向表中更新和插入信息期间的可靠性
    ●可根据企业业务是否要支持事务选择存储引擎

如何修改存储引擎

共有四种方法

alter table 修改;
格式:
alter table table_name engine=引擎;
例如:
MySQL> alter table user_info engin=MyISAM;

方法二:

修改my.cnf,指定默认存储引擎并重启服务
格式:
default-storage-engine=InnoDB
例如:
vim my.cnf
default-storage-engine=InnoDB

方法三:

create table 创建表时指定存储引擎
格式:
create table 表名 (字段) engine=引擎
例如:
MySQL> create table yibiao(id int)engine=MyISAM;

方法四:(5.7之前的版本可以用)

Mysql_convert_table_format转化存储引擎
格式:
Mysql_convert_table_format-user=root--password=密码--sock=/tmp/mysql.sock-engine=引擎 库名 表名
例如:
[root@localhost ~]# yum install perl-DBI perl-DBD-MySQL -y
[root@localhost ~]# /usr/local/mysql/bin/bysql_convert_table_format --user=root --passwork='123' --sock=/tmp/mysql.sock auth

mysql事务用法介绍及储存引擎介绍(MyLSAM,Innodb)相关推荐

  1. mysql 数据库引擎介绍_MYSQL 数据库引擎介绍

    一般来说,MySQL有以下几种引擎:ISAM.MyISAM.HEAP.InnoDB和Berkley(BDB).注意:不同的版本支持的引擎是有差异的.当然啦,如果你感觉自己的确技术高超,你还能够使用My ...

  2. mysql 事务的好坏_mysql存储引擎:InnoDB和MyISAM的差别/优劣评价/评测/性能测试

    InnoDB和MyISAM简介 MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写 ...

  3. MySQL数据库储存引擎Inoodb一--记录储存结构

    在开文我先说明一下,接下来的数据库知识文章都是在微信公众号"我们都是小青蛙"学习然后在通过自己的理解进行书写的.有兴趣的朋友可以去关注这个微信公众号.话不多说,我们在日常使用数据库 ...

  4. 【贪玩巴斯】Unity3D初学圣经(一)——学习要求 Unity简单介绍 游戏引擎介绍 课程体系介绍 「1-1 到 1-4 」—— 2021年12月9日

    Unity3D初学圣经 一 --学习要求 & Unity简单介绍 & 游戏引擎介绍 & 课程体系介绍 本文对应视频P1 1-1 到P2 1-4 1.学习要求 2.Unity简单 ...

  5. MySQL事务与存储引擎

    文章目录 一.MySQL事务 1.事务的概念 2.事务的ACID特点 2.1 原子性(Atomicity) 2.2 一致性(Consistency) 2.3 隔离性(Isolation) 2.4 持久 ...

  6. mysql储存引擎,数据类型,增删改查

    1   查看 mysql 数据库所支持的储存引擎 . 2   mysql默认储存引擎 3 mysql的数据类型 1.整数类型 Smallint Mediumint Int和integer Bigint ...

  7. 超干货!为了让你彻底弄懂MySQL事务日志,我通宵肝出了这份图解

    还记得刚上研究生的时候,导师常挂在嘴边的一句话,"科研的基础不过就是数据而已."如今看来,无论是人文社科,还是自然科学,或许都可在一定程度上看作是数据的科学. 倘若剥开研究领域的外 ...

  8. mysql事务ACID原理MVCC 幻读

    文章目录 mysql事务原理MVCC 1存储引擎 1.InnoDB存储引擎 2.MyISAM存储引擎 2.undo和redo的功能 undo: redo: 3.mysql锁 3.1表级锁 3.2行级锁 ...

  9. mysql 事务隔离详解_MySQL 中事务、事务隔离级别详解

    一.事务的概念 1.事务的概念 2.在mysql中哪些存储引擎(表类型)支持事务哪些不支持 3.事务的四个属性 4.mysql事务的创建与存在周期 5.mysql行为 6.事务的隔离性和性能 7.my ...

最新文章

  1. 田渊栋的2021年终总结:多读历史!历史就是一个大规模强化学习训练集
  2. paho mqtt client调试记录
  3. Calendar类介绍_获取对象的方式
  4. 【牛客 - 370F】Rinne Loves Edges(树,统计dp)
  5. linux之ClamAV杀毒软件安装配置
  6. java多线程-线程停止
  7. MSDEV.EXE-应用程序错误解决办法(转)
  8. 修改Fedora 18的窗口背景颜色为浅绿色
  9. php培训班学多久,学php最快要多久? 学习路线?要不要报培训班?
  10. redis查看集合中元素的数量,scard
  11. (附源码)音乐播放小程序 毕业设计 031306
  12. 区块链要去中心化么?
  13. Android ViewPager 如何判断当前页面是从前一页还是后一页滑动过来
  14. HBase Flush 解析
  15. HTML的学习-2|HTML 标签(上)
  16. Android所有View通用下拉刷新上拉加载控件
  17. Firefox火狐浏览器打开页面链接的方式的设置
  18. win10系统要求配置_Win10 1909 系统的优点与缺点和配置要求与优化技巧
  19. CDH数仓项目(一) —— CDH安装部署搭建详细流程
  20. js文本比较(json数据比较)

热门文章

  1. Flutter实现帧动画
  2. 字节跳动---万万没想到之聪明的编辑
  3. MapReduce+Docker:Archer简化Netflix媒体处理
  4. 从萌新玩家到游戏开发,IEG首位女专家的升级之路
  5. 研发团队远程高效协作秘笈
  6. 【HTTP】另类的POST头数据 RFC1867协议格式简析
  7. NodeJS使用ES6
  8. Cockroach DB 1.0发布
  9. hosts文件 请检查文件是否在别的程序中打开
  10. 大剑无锋之mysql中的行转列如何写?【面试推荐】