栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据库基础01 - MySQL

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据库基础01 - MySQL

1. 什么是MySQL?

        MySQL是一种关系型数据库,所谓的关系型数据库,是建立在关系模型基础之上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。在Java企业级开发中非常常用,因为它是开源免费的,并且方便扩展。可以用SQL语句方便的在一个表及其多个表之间做非常复杂的数据查询。安全性高。

MySQL默认端口为3306。

常见的数据库总结:常见的数据库

2. 什么是非关系型数据库?

        非关系型数据库也叫NOSQL,采用键值对的形式进行存储。它的读写性能很高,易于扩展,可分为内存性数据库以及文档型数据库,比如 Redis,Mongodb,HBase等等。适合使用非关系型数据库的场景有日志系统、地理位置存储、数据量巨大等等。

3. 关系型数据库和非关系型数据库的区别

(1)关系型数据库的优点

  • 容易理解。因为它采用了关系模型来组织数据。
  • 可以保持数据的一致性。
  • 数据更新的开销比较小。
  • 支持复杂查询(带where子句的查询)

(2)非关系型数据库的优点

  • 不需要经过SQL层的解析,读写效率高。
  • 基于键值对,数据的扩展性很好。
  • 可以支持多种类型数据的存储,如图片,文档等等。

2. 存储引擎

(1)一些常见命令

查看MySQL提供的所有存储引擎:show engines;

查看MySQL当前默认的存储引擎:show variables like '%storage_engine%';、

查看表的存储引擎:show table status like "table_name" ;

        MySQL 当前默认的存储引擎是InnoDB,并且在5.7版的所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB ⽀持事务。

(2)MyISAM和InnoDB的区别

        MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽性能极佳,且提供了⼤量的特性,包括全⽂索引、压缩、空间函数等,但MyISAM不⽀持事务和⾏级锁,⽽且最⼤的缺陷就是崩溃后⽆法安全恢复。不 过,5.5版本之后,MySQL引⼊了InnoDB(事务性数据库引擎),MySQL 5.5版本后默认的存储引擎为 InnoDB。 ⼤多数时候我们使⽤的都是 InnoDB 存储引擎,但是在某些情况下使⽤ MyISAM 也是合适的⽐如读密集的情况下。

(3)MyISAM和InnoDB的对比

        01 是否⽀持⾏级锁 : MyISAM 只有表级锁,InnoDB ⽀持⾏级锁和表级锁,默认为⾏级锁。

        02 是否⽀持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原⼦性,其执⾏速度⽐InnoDB类型更快,但不提供事务⽀持。但是InnoDB 提供事务⽀持,是具有事务(commit)、回滚(rollback)和崩溃修复能⼒(crash recovery capabilities) 的事务安全(transaction-safe (ACID compliant))型表。

        03 是否⽀持外键: MyISAM不⽀持,InnoDB⽀持。

行级锁:将查询结果集在表中对应的记录,开始锁住,在当前事务结束前,别的事务根本修改不了锁住的数据。行级锁也称为悲观锁。而乐观锁是什么呢?

乐观锁会在数据后面添加一个隐藏的版本号,假设为version,只要事务读取到的版本号没有改变,事务就能对数据进行修改。

5. 字符集及校对规则

        字符集指的是⼀种从⼆进制编码到某类字符符号的映射。校对规则则是指某种字符集下的排序规则。 MySQL中每⼀种字符集都会对应⼀系列的校对规则。 MySQL采⽤的是类似继承的⽅式指定字符集的默认值,每个数据库以及每张数据表都有⾃⼰的默认值, 他们逐层继承。⽐如:某个库中所有表的默认字符集将是该数据库所指定的字符集(这些表在没有指定字符集的情况下,才会采⽤默认字符集)。

6. 索引

        索引就是数据结构,作用是MySQL为了加快数据查询速度。

       MySQL索引使⽤的数据结构主要有B树索引和哈希索引 。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝⼤多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余⼤部 场景,建议选择B树索引。

        MyISAM 和 InnoDB只支持B+树索引。

         MySQL的B树索引使用的是B树中的B+树。B+树是B树的变体。B树和B+树最大的区别在于非叶子节点是否存储数据。

        B树和B+树的介绍:B树和B+树

(1)实现B树索引的方式有什么区别?

        MyISAM:B+树叶节点的data域存放的是数据记录的地址。在索引检索的时候,首先按照B+树搜索算法搜索索引,如果指定的Key存在,则取出其 data 域的值,然后以 data 域的值为地址 读取相应的数据记录。这被称为“非聚簇索引”。

        InnoDB:其数据文件本身就是索引文件。MyISAM中索引文件和数据文件是分离的,而InnoDB表数据文件本身就是按B+树组织的一个索引结构,树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。这被称为“聚簇索引”。而其余的索引都作为辅助索引,辅助索引的data域存储相应记录主键的值而不是地址,这也是和MyISAM不同的地方。在根据主索引搜索时,直接找到key所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,再走一遍主索引。 因此,设计表的时候,不建议使用过长的字段作为主键,也不建议使用非单调的字段作为主键,这样会造成主索引频繁分裂。

7. 都知道数据库索引采用B+树而不是B树,主要原因是什么?

        B+树只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频繁的,而B树只能中序遍历所有节点,效率太低。

8. MySQL优化?从哪些方面可以做到性能优化?

  • 为搜索字段创建索引
  • 避免使用 Select *,列出需要查询的字段
  • 垂直分割分表
  • 选择正确的存储引擎

9. MySQL的执行流程?/ 如何执行一条SQL语句的?

(1)MySQL的架构 / 内部结构

        从上图可看出,MySQL 的架构共分为两层:Server 层和存储引擎层。

        01  Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现,主要包括连接器,查询缓存、解析器、预处理器、优化器、执行器等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存储过程、触发器、视图等。)都在 Server 层实现。

        02  存储引擎层负责数据的存储和提取。支持 InnoDB、MyISAM、Memory 等多个存储引擎,不同的存储引擎共用一个 Server 层。现在最常用的存储引擎是 InnoDB,从 MySQL 5.5 版本开始, InnoDB 成为了 MySQL 的默认存储引擎。我们常说的索引数据结构,就是由存储引擎层实现的,不同的存储引擎支持的索引类型也不相同,比如 InnoDB 支持索引类型是 B+树 ,且是默认使用,也就是说在数据表中创建的主键索引和二级索引默认使用的是 B+ 树索引。

(2)执行一条SQL的流程

        MySQL是基于TCP协议进行传输的。

  1. 客户端请求->
  2. 连接器(验证用户身份,给予权限),先通过三次握手建立连接,连接成功后验证用户名与密码  ->
  3. 查询缓存(存在缓存则直接返回,不存在则执行后续操作)->
  4. 分析器(对SQL进行词法分析和语法分析操作) ->
  5. 优化器(主要对执行的sql优化选择最优的执行方案方法) ->
  6. 执行器(执行时会先看用户是否有执行权限,有才去使用这个引擎提供的接口)->
  7. 去引擎层获取数据返回(如果开启查询缓存则会缓存查询结果)

10. Drop、Delete和Truncate的共同点和区别

Drop、Delete、Truncate都表示删除,但是三者有一些差别。

      01 Drop命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的DML触发器也不会被触发,这个命令也不能回滚。

     02 Delete用来删除表的全部或者一部分数据行,执行delete之后,用户需要提交(commmit)或者回滚(rollback)来执行删除或者撤销删除,会触发这个表上所有的delete触发器。

    03 Truncate删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,TRUNCATE比delete更快,占用的空间更小。

因此,在不再需要一张表的时候,用Drop;在想删除部分数据行时候,用Delete;在保留表而删除所有数据的时候用Truncate。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039336.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号