系统表都变为InnoDb表

从MySQL 8.0开始,系统表全部换成事务型的InnoDB表,默认的MySQL实例将不包含任何MyISAM表,除非手动创建MyISAM表

基本操作

创建数据表的语句为CREATE TABLE

查看表基本结构语句DESCRIBE:DESCRIBE 表名 / DESC 表名

  • NULL:表示该列是否可以存储NULL值。
  • Key:表示该列是否已编制索引。
  • PRI表示该列是表主键的一部分
  • UNI表示该列是UNIQUE索引的一部分
  • MUL表示在列中某个给定值允许出现多次。
  • Default:表示该列是否有默认值,有的话指定值是多少。
  • Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。

查看表详细结构语句SHOW CREATE TABLE:使用SHOW CREATE TABLE语句,不仅可以查看表创建时候的详细语句,还可以查看存储引擎和字符编码

加上参数‘\G’之后,可使显示结果更加直观,易于查看。(SHOW CREATE TABLE 表名 \G)

修改字段的数据类型

ALTER TABLE <表名> MODIFY <字段> <数据类型>
  • 修改字段的数据类型
ALTER TABLE <表名> CHANGE <旧字段> <新字段> <新数据类型>
  • 添加字段
ALTER TABLE <表名> ADD <新字段> <数据类型>

更改表的存储引擎

存储引擎是MySQL中的数据存储在文件或者内存中时采用的不同技术实现。可以根据自己的需要,选择不同的引擎,甚至可以为每一张表选择不同的存储引擎。MySQL中主要的存储引擎有MyISAM、InnoDB、MEMORY(HEAP)、BDB、FEDERATED等。可以使用“SHOW ENGINES;”语句查看系统支持的存储引擎。

ALTER TABLE <表名> ENGINE = <更改后的引擎名>

自增变量的持久化

在MySQL 8.0之前,自增主键AUTO_INCREMENT的值如果大于max(primary key)+1,在MySQL重启后,会重置AUTO_INCREMENT=max(primary key)+1,这种现象在某些情况下会导致业务主键冲突或者其他难以发现的问题

数据库函数

条件判断函数

  • IF(expr, v1, v2):如果表达式expr是TRUE(expr <> 0 and expr <> NULL),则返回值为v1;否则返回值为v2。
  • IFNULL(v1,v2):假如v1不为NULL,则IFNULL()的返回值为v1;否则其返回值为v2。IFNULL()的返回值是数字或者字符串,具体情况取决于其所在的语境
  • CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2]…[ELSE rn+1] END:如果expr值等于某个vn,则返回对应位置THEN后面的结果;如果与所有值都不相等,则返回ELSE后面的rn+1。

系统信息函数

  • VERSION()返回指示MySQL服务器版本的字符串。这个字符串使用utf8字符集;select version()
  • 查看当前用户的连接数:SELECT CONNECTION_ID()
  • SHOW PROCESSLIST命令输出当前用户的连接信息
  • 使用SELECT LAST_INSERT_ID查看最后一个自动生成的列值

格式化函数FORMAT(x,n)

FORMAT(x,n)将数字x格式化,并以四舍五入的方式保留小数点后n位,结果以字符串的形式返回。若n为0,则返回结果函数不含小数部分。

窗口函数

在MySQL 8.0版本之前,没有排名函数,所以当需要在查询当中实现排名时,必须手写@变量

窗口函数的语法:

window_function_name(expression)

OVER (

[partition_defintion]

[order_definition]

[frame_definition]

)

即:窗口函数名([<字段名>]) over([partition by <分组字段>] [order by <排序字段> [desc]] [<窗口分区>])

使用正则表达式查询

MySQL中使用REGEXP关键字指定正则表达式的字符匹配模式。表7.3列出了REGEXP操作符中常用字符匹配列表。

例如:查询f_name字段以“be”开头的记录

SELECT * FROM <表名> WHERE f_name REGEXP '^be'

MySQL 8.0 GROUP BY不再隐式排序

老版本在使用GROUP BY 后会自动排序,mysql8取消了这一操作,需要排序必须加上ORDER BY子句

MySQL错误日志

通过错误日志可以监视系统的运行状态,便于及时发现故障、修复故障

使用SHOW VARIABLES语句查询错误日志的存储路径

SHOW VARIABLES LIKE 'log_error'

通过show variables like '%general%';语句可以查询当前查询日志的状态

索引

show index from <表名>

适合作为索引:

  1. 字段数值有唯一性
  2. 频繁作为where查询条件的字段
  3. 经常group by 和 order by的列
  4. updata 和 delete的where条件列
  5. distinct的列需要创建索引
  6. 使用列类型小的创建索引
  7. 字符串很长可以用字符串前缀创建索引
  8. 联合索引优于单列索引

不适合索引:

  1. where中使用不到的索引
  2. 数据量很小的表不要使用索引了
  3. 有大量重复数据的列上不要创建索引
  4. 避免对经常更新的表创建过多的索引
  5. 不建议对无需的值作为索引
  6. 删除不再使用或者很少使用的索引
  7. 不要定义冗余或重复的索引

优化查询

  • id 有几个select就会有几个id,id可能会存在相同的情况,相同id两条数据前面一条是驱动表,后一张是被驱动表(这里有个例外:涉及子查询优化器会进行重写,id可能不会按select计数)
  1. id相同可以认为是从上往下执行
  2. id越大优先级越高越有优先执行
  3. id每个号码代表一个独立查询,查询越少越好
  • select_type:
  1. SIMPLE表示简单查询,不包含UNION查询和子查询,连接查询也是SIMPLE
  2. PRIMARY表示主查询,或者是最外层的查询语句,对于包含UNION,UNION ALL或者子查询的大查询来说,它是由几个小查询组成的,最左边的查询就是PRIMARY.  
  3. UNION表示查询的第二个或者后面的查询语句。对于包含UNION,UNION ALL或者子查询的大查询来说,它是由几个小查询组成的,最左边的查询以外的就是UNION
  4. DEPENDENT UNION 链接查询中的第二个或后面的查询语句,相关的
  5. SUBQUERY:不相关子查询
  6. DEPENDENT SUBQUERY:相关子查询
  • table:表示查询的表
  • type:表示表的链接类型,下面从最优到最差
  1. system级别:只有一条数据的系统表或衍生表只能有一条数据的主查询很明显实际开发当中 我们是不会只有一条数据的
  2. const级别:仅仅能查出一条的SQL语句并且用于Primary key 或 unique索引;
  3. eq_ref级别:唯一性索引:对于每个索引键的查询,返回匹配唯一行数据(有且只有1个,不能多,不能0);此种情况常见于唯一索引和主键索引
  4. ref级别:非唯一性索引:对于每个索引键的查询,返回匹配的所有行(可以是0,或多个)。
  5. range级别:检索指定范围的行,查找一个范围内的数据,where后面是一个范围查询 (between,in,> < >=);in有时有可能会失效,导致为ALL;
  6. index级别:与all链接相同,除了只扫描索引树
  7. ALL级别:进行完整的表扫描
  • possible_keys:能使用的索引
  • key:表示实际使用到的索引
  • key_len:表示选择的索引字段按字节计算的长度,对于联合索引有一定参考价值
  • ref:表示使用那一列或常数与索引一起来查询
  • rows:必须检查的行数,越小越好
  • extra:
  1. Distinct : 一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
  2. Range checked for each: 没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一
  3. Using filesort: 发生了硬盘或内存排序,一般是由order by 或 group by触发的;典型的情况,排序的字段不是驱动表的字段,则会使用临时表将数据都添加进去,最后进行排序,如果数据大则硬盘排序,如果小则内存排序.可以考虑使用联合索引把where后的查询字段和排序字段联合索引
  4. Using index:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,使用了覆盖索引优化
  5. Using temporary:使用了临时表,通常和filesort一起发生. 典型情况:使用了派生表.
  6. Using where: 数据库服务层从存储引擎提取了数据又进行了一次条件过滤,不代表一定有回表
  7. using index condition: ICP优化,从5.6之后提供.将过滤条件下推到存储引擎层执行,能更好的利用复合索引来过滤数据,减少IO.
  8. Using index for group-by:使用了松散索引扫描

约束

如何查询表中的约束

SELECT * FROM information_schema.table_constraints WHERE table_name = "表名"

Mysql8基础知识的更多相关文章

  1. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  2. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  3. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  4. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  5. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  6. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  7. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  8. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  9. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

随机推荐

  1. 利用 Onekey Theater 改善屏幕显示效果

    介绍 Onekey Theater(一键影音),它是联想笔记本带的一键影音功能,使用它能够更改笔记本的显示效果和音效,以此模仿电影院的效果,为用户带来更好是视听效果及享受. 作用 之前的联想笔记本自带 ...

  2. Spring Ioc源码分析系列--Bean实例化过程(一)

    Spring Ioc源码分析系列--Bean实例化过程(一) 前言 上一篇文章Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理已经完成了对 ...

  3. 在 .NET 中使用 FixedTimeEquals 应对计时攻击

    计时攻击 在计算机安全中,计时攻击(Timing attack)是旁道攻击 (Side-channel attack) 的一种,而旁道攻击是根据计算机处理过程发出的信息进行分析,包括耗时,声音,功耗等 ...

  4. Flink使用Pod Template将状态快照(Checkpoint、Savepoint)存储在NFS

    背景 Flink 版本 1.13.3,使用 native k8s 部署模式,原采用 HDFS 作为状态快照(Checkpoint.Savepoint)的存储地址,但是由于仅使用了其 HDFS 作为状态 ...

  5. 花两万培训Java的三个同学,最后都怎么样了

    仙路尽头谁为峰,学完Java学Python. 前言 对于IT行业的培训,例如Java.大数据.H5等等,我一直保持着肯定的态度. 因为当年大学时期的我,也差点去参加Java培训.一是因为那时钱包空空, ...

  6. 关于python导入数据库excel数据时出现102, b"Incorrect syntax near '.15562'.DB-Lib error message 20018, severity 1的问题总结

    1.对于在使用python导入sqlsever时,出现102, b"Incorrect syntax near '.15562'.DB-Lib error message 20018, se ...

  7. wsl2环境搭建

    序言 我电脑配置不高,开虚拟机跑linux总觉得太卡.最近才了解到windows早就上了wsl2--一款较为轻量的虚拟机软件.所以本篇博客偏笔记向,存粹记录以便多次使用. 环境 宿主机windows1 ...

  8. .net core 抛异常对性能影响的求证之路

    一.前言 在.net 社区中曾经听到过很多关于大量抛异常会影响性能这样的结论,心中一直就存在各种疑问.项目中使用自定义异常来处理业务很爽,但是又担心大量抛业务异常存在性能问题. 查阅了各种文档,微软官 ...

  9. 5G的发布加快了智慧城市/三维物联网等行业的发展

    最近很多人发现自己的5G手机突然没了5G信号,难道是美国搞的鬼? 不不不,这其实是因为5G的NSA基站被撤站了,官方已经做了部署,要大力推进SA网络建设.所以之前支持NSA模式的5G手机,现在都成了4 ...

  10. SAP Web Dynpro-消息

    在ABAP Workbench中,您还可以创建和显示包含Dynpro应用程序最终用户信息的消息. 这些消息显示在屏幕上. 这些是用户交互消息,显示有关Web Dynpro应用程序的重要信息. 为了向用 ...