MySQL概述_mysql是什么语言

MySQL概述_mysql是什么语言MySql主要概念 参考:https://snailclimb.gitee.io/javaguide/#/database/MySQL MySQL 是一种关系型数据库,在Java企业级开发中非常常用…

MySQL概述

MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的。MySQL是开放源代码的,因此任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。

1 存储引擎

1.1 查看引擎的命令
查看MySQL提供的所有存储引擎

mysql> show engines;

查看MySQL当前默认的存储引擎

我们也可以通过下面的命令查看默认的存储引擎。

mysql> show variables like “%storage_engine%”;

查看表的存储引擎

show table status like “table_name” ;

1.2 MyISAM和InnoDB区别
是否支持行级锁 : MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。
是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。但是InnoDB 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
是否支持外键: MyISAM不支持,而InnoDB支持。
是否支持MVCC :仅 InnoDB 支持。应对高并发事务, MVCC比单纯的加锁更高效;MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作;MVCC可以使用 乐观(optimistic)锁 和 悲观(pessimistic)锁来实现;各数据库中MVCC实现并不统一。推荐阅读:MySQL-InnoDB-MVCC多版本并发控制

《MySQL高性能》上面有一句话这样写到:

不要轻易相信“MyISAM比InnoDB快”之类的经验之谈,这个结论往往不是绝对的。在很多我们已知场景中,InnoDB的速度都可以让MyISAM望尘莫及,尤其是用到了聚簇索引,或者需要访问的数据都可以放入内存的应用。

一般情况下我们选择 InnoDB 都是没有问题的,但是某事情况下你并不在乎可扩展能力和并发能力,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择MyISAM也是一个不错的选择。但是一般情况下,我们都是需要考虑到这些问题的。

1.3 两种搜索引擎索引的实现
MySQL的BTree索引使用的是B树中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。

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

2 字符集及校对规则
字符集指的是一种从二进制编码到某类字符符号的映射。校对规则则是指某种字符集下的排序规则。MySQL中每一种字符集都会对应一系列的校对规则。

MySQL采用的是类似继承的方式指定字符集的默认值,每个数据库以及每张数据表都有自己的默认值,他们逐层继承。比如:某个库中所有表的默认字符集将是该数据库所指定的字符集(这些表在没有指定字符集的情况下,才会采用默认字符集)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10180.html

(0)
上一篇 2023-01-24 09:30
下一篇 2023-01-24

相关推荐

  • HiveSql调优系列之Hive严格模式,如何合理使用Hive严格模式「建议收藏」

    HiveSql调优系列之Hive严格模式,如何合理使用Hive严格模式「建议收藏」所谓Hive的严格模式,就是为了避免用户提交一些恶意SQL,消耗大量资源进而使得运行环境崩溃做出的一些安全性的限制。

    2023-06-03
    143
  • 以Python write函数为中心的原始标题

    以Python write函数为中心的原始标题Python是一门高级编程语言,它在编写简单的脚本程序和复杂的桌面应用程序方面都非常方便。如果你正在使用Python编写文件操作或数据存储的代码,那么你一定会用到Python中强大而又常用的write()函数。因此,本文将以Python write函数为中心,详细讲解它的用法和应用场景,希望能够帮助你写出更加高效的Python代码。

    2024-04-29
    78
  • Spyder打不开解决方法

    Spyder打不开解决方法Spyder是一款非常优秀的Python开发IDE,拥有较为完整的开发环境和强大的代码编辑、调试能力,被广泛的使用于Python程序的开发中。但是,在使用Spyder时也有可能会遇到一些问题,比如无法正常打开等问题,本文将从多个角度为大家介绍Spyder打不开的解决方法,希望可以帮助大家更好的使用Spyder。

    2024-06-21
    44
  • 列式存储好处_按行优先存储和按列优先存储

    列式存储好处_按行优先存储和按列优先存储大家好,我是大D。 不知是否有小伙伴们疑问,为什么列式存储会广泛地应用在 OLAP 领域,和行式存储相比,它的优势在哪里?今天我们一起来对比下这两种存储方式的差别。 其实,列式存储并不是一项新技术,最

    2023-05-17
    157
  • Redis 集群伸缩原理「建议收藏」

    Redis 集群伸缩原理「建议收藏」Redis 节点分别维护自己负责的槽和对应的数据。伸缩原理:Redis 槽和对应数据在不同节点之间移动 环境:CentOS7 搭建 Redis 集群 一、集群扩容 1. 手动扩容 (1) 准备节点 9

    2023-04-15
    167
  • mysql 在存储过程中的用户变量、系统变量、局部变量的区别「建议收藏」

    mysql 在存储过程中的用户变量、系统变量、局部变量的区别「建议收藏」MySQL数据库中的变量分为MySQL系统变量和MySQL用户变量。 一、MySQL用户变量:基于会话变量实现的, 可以暂存值, 并传递给同一连接里的下一条sql使用的变量.当客户端连接退出时,变量…

    2023-03-08
    149
  • 系统打开python(系统打开软件乱码)

    系统打开python(系统打开软件乱码)1、在windows系统中运行python脚本,需要安装windows版本的python,可以到官方网站下载与操作系统对应的版本。python windows版本官网下载地址: 2、下载完成后直接双击安装,python安装很简单一路下一步就行,安装完成后就可以直接运行python脚本了。3、可以在python自带的编辑器IDLE中编辑调试脚本:

    2023-11-29
    118
  • mybatis保存的时候返回值为数据库中主键的id值

    mybatis保存的时候返回值为数据库中主键的id值 insert into t_user (id, avatar, create_time, email, nick_name, password, type, update_time, use…

    2023-03-26
    145

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注