首页 > 数据库 >MySQL 的一条语句的执行流程

MySQL 的一条语句的执行流程

时间:2022-09-25 21:26:27浏览次数:79  
标签:语句 自增 log 流程 支持 InnoDB MyISAM MySQL 主键


分为客户端,服务端,存储引擎三部分。

mysql 8.0后,取消缓存。

1. myisam和innodb的区别。

Mysql的InnoDB和MyISAM存储引擎的常见区别如下:

锁支持:MyISAM 只有表级锁(table-level locking),读取时加共享表锁,写入时加排它表锁,MyISAM 一锁就是锁住了整张表,在并发写的时候InnoDB性能远超MyISAM。而 InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁,行锁大幅度提高了多用户并发操作的新能,但行锁,只是在使用了索引时是有效的,如果没使用索引则会锁全表。
事务支持: MyISAM 不提供事务支持,InnoDB 提供事务支持,具有提交(commit)和回滚(rollback)事务的能力,这一点保证数据的正确性和完整性非常重要。

MySQL InnoDB 引擎使用 redo log(重做日志) 保证事务的持久性,使用 undo log(回滚日志) 来保证事务的原子性。
MySQL InnoDB 引擎通过 锁机制、MVCC 等手段来保证事务的隔离性( 默认支持的隔离级别是 REPEATABLE-READ )。
保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。

外键支持:MyISAM 不支持,而 InnoDB 支持。但是一般不在数据库使用外键,而是在应用层解决,使用外键会造成级联更新,且级联更新是强阻塞,存在数据库更新风暴的风险;外键用时也会影响数据库的插入速度。
主键支持:MyISAM允许没有主键的表存在。InnoDB表必须有主键,如果没有设定主键,就会自动生成一个 6 字节隐藏列作为主键列(用户不可见)。
数据库崩溃恢复的支持:MyISAM 不支持,而 InnoDB 支持。使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证数据库恢复到崩溃前的状态。这个恢复的过程依赖于 redo log、undo log、bin log。
MVCC的支持:MyISAM 不支持,而 InnoDB 支持。MVCC 可以看作是行级锁的一个升级,可以有效减少加锁操作,提供性能。
主键自增记录:主键自增时只会比较最大自增主键值。MyISAM 表会把自增主键的最大ID记录到表数据文件里,重启MySQL 自增主键的最大ID也不会丢失。InnoDB 表只是把自增主键的最大 ID 记录到内存中,所以重启数据库会导致最大 ID 丢失,会以表中实际存在的最大主键为准。

实际上MySQL自增主键不能持久化算是一个臭名昭著的bug:bugs.mysql.com/bug.php?id=…。所以在Mysql 8.0后,InnoDB会把自增主键计数器的最新值写入redo log日志中,即使Mysql数据库发生重启,InnoDB也会根据redo log中的计数器信息来初始化其内存值,再也不怕自增主键丢失了。

索引结构:MyISAM使用非聚集索引,索引和数据分开,只缓存索引;InnoDB使用聚集索引,主索引和数据存在一个文件。
行数记录:InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快,但前提是没有任何WHERE条件,如果有条件,则此时都会去实际地去计算表的行数;

转载:https://juejin.cn/post/7127279196811821070

2 mysql的日志操作(redo log、undo log、bin log)。

转载:https://juejin.cn/post/6860252224930070536

参考:https://www.bilibili.com/video/BV1da411G7nz/?spm_id_from=333.1007.tianma.1-1-1.click&vd_source=46d50b5d646b50dcb2a208d3946b1598

标签:语句,自增,log,流程,支持,InnoDB,MyISAM,MySQL,主键
From: https://www.cnblogs.com/chenyi502/p/16728970.html

相关文章

  • mysql存储引擎
    MySQL存储引擎概述MySQL5.0支持的存储引擎包括MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中Inno......
  • mysql整理
    mysql整理跨库更新数据UPDATEpmcc_assess.tb_project_infoaTableINNERJOIN(SELECTidasdata_id,uuidasdata_uuidFROMpmcc_contract.tb_cms_contractbTa......
  • mysql函数
    日期函数返回当前日期,只包含年月日selectcurdate()返回当前时间,只包含时分秒selectcurtime()返回当前的日期和时间,年月日时分秒全都包含selectnow()提取......
  • mysql_数据库设计三范式
    设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。目前关系数据库有六......
  • mysql事务
    什么是事务一系列有序的数据库操作:要么全部成功要么全部回退到操作前的状态中间状态对其他连接不可见事务的基本操作:|基本操作|说明||:-------------|:-......
  • mysql 数据库设计的规范
    数据库设计的规范数据库表和字段都大写表都要加业务后缀,例如_C客户表_B基础表_P权限表必须有主键,主键是表名去掉业务后缀,加_ID,大多表的主键使用UUID字段多个单词时,......
  • mysql正则表达式
    一:数据准备CREATETABLE`t_user`(`USER_ID`intNOTNULLAUTO_INCREMENT,`USER_NAME`char(255)CHARACTERSETutf8COLLATEutf8_general_ciNOTNULL,`US......
  • mysql运维
    一:备份1:备份内容数据(数据文件或文本格式数据)操作日志(binlog)(数据库变更日志)2:冷备份与热备份冷备份(关闭数据库服务,完整拷贝数据文件)热备份......
  • mysql存储过程
    MySQLmysql存储过程概述存储过程是存储在数据库的一组SQL语句集,用户可以通过存储过程名和传参多次调用的程序模块。特点:使用灵活,可以使用流控制语句,自定义变量等完......
  • mysql索引
    索引MySQL使用索引快速查找具有特定列值的行。如果没有索引,MySQL必须扫描整个表以找到相关的行。较大的表,搜索速度越慢。索引由类型和方法组成(有的时候你没有指定就......