• MySQL(一)存储引擎


    MySQL数据库作为一款开源免费的关系型数据库受到了国内很多开发人员欢迎,下面想把MySQL数据库的一些知识点纪录下来,对于自己也是一个再学习再记忆的过程;

    插件式的存储引擎是MySQL数据库最重要的特点之一,它支持了MyIsSAM,InnoDB,BDB,MEMORY,MERGE等多种存储引擎,开发人员可以根据需要来选择不同的存储引擎,从而使应用达到事半功倍的效果;

    查看当前默认存储引擎:

    show VARIABLES like "%ENGINE%"

    查看mysql支持哪些引擎:

    show ENGINES

    修改默认存储引擎:

    在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,保存。

    下面说一下MySQL数据库经常使用的几种存储引擎:

    comment:对各个存储引擎做了简要功能定义

    一.MyIsSAM存储引擎

    1.MyIsSAM存储引擎是MySQL数据库默认的存储引擎,

    2.不支持事务

    3.不支持外键,

    优势:访问速度快,对事物完整性没有要求或者以insertselect为主的应用基本上都可以使用这个引擎来创建表

    4.MyIsSAMl存储引擎在磁盘上存储成3个不同的文件。文件名和表明一致,但是这三个文件的后缀名不同:

    .frm(存储表定义)

    .MYD(MYData,存储数据)

    .MYI(MYIndex,存储索引)

    数据文件和索引文件可以放置在不同的目录中,平均分布IO,访问速度更快。

    指定索引文件和数据文件的存储路径可以在创建表的时候使用 data directory 和index directory语句来指定,文件路径是绝对路

    径。

    5.使用MyIsSAM存储引擎的表支持三种不同的存储格式:

    静态表(固定长度)

    动态表

    压缩表

    这里主要说一下静态表,因为静态表是MyIsSAM默认的存储格式,他有一个比较特殊的地方,现在如果你向表中存储一个“   ab  ”

    这种前后带空格形式的数据的时候,它会将数据前后的空格去掉。可能导致数据失真。静态表的优势就是存储速度快,容易缓存,出现故障后可以快速恢复。

    二、InnoDB存储引擎

    InoDB存储引擎支持事务,相比较MyIsSAM存储引擎而言,他的insert能力会差点,而且也会占用更多的磁盘空间来存储数据和索引。

    1.支持自动增长列

    InnoDB的自动增长列必须是索引,如果是组合索引,自动增长列也必须是组合索引的第一列。可以使用

    alter table 表名 auto_increment = n

    来强制设置自动增长列的初始值,默认从1开始,注意:强制的默认值存储在内存如果在使用默认值之前数据库宕机,该默

    认值会丢失,重新恢复服务之后再次设置就OK了

    2.InnoDB能够支持外键:

    这个特点是MySQL数据库所有的存储引擎中InnoDB独有的。创建外键的时候父表必须有对应的索引,字表在创建外键的时候也

    会自动创建对应的索引

    对有主外键关系的表进行操作的时候一定需要注意谨慎,错误的操作可能会导致数据丢失。

    如果某个表被其他的表添加了外键参照,那么这个表对应的索引或者对应的逐渐无法被删除。

    我们可以使用下面的命令来关闭外键约束检查:

    set foreign_key_checks =0

    执行下面的操作命令开启外键约束检查:

    set foreign_key_checks = 1

    执行下面的命令可以查看外键信息:

    show create table 或者 show table status

    三、MEMORY存储引擎

    此存储引擎使用的是存在于内存中的内容来创建表,这种表的访问速度极快,因为是基于内存的嘛。但是这是由于这一点,它的

    数据也是非常的不安全,一但服务挂掉了,那么数据就会丢失。另外此存储引擎在使用的时候还需要考虑数据量的大小,如果数

    据不需要使用了需要对这些数据进行清除释放内存。

    四、应用场景总结:

    MyIsSAM:

    适用于有大量的select 和insert操作,对于事务的完整性和并发性没有很高的要求的情况

    InnoDB:

    适用于有大量的update和delete操作,对事务的完整性和并发场景下数据的一致性有要求的情况

    MEMORY:

    数据存储在内存上,对访问速度要求很高的情况下可以使用,但是数据容易丢失。

  • 相关阅读:
    Linux运维之监控CPU和内存的日志工具
    Linux磁盘缓存的有趣实验
    Linux运维之内存分析2
    Linux运维之内存分析
    使用kubectl create 和 kubectl apply创建资源对象的区别
    Docker学习:Image的本地存储结构
    Docker 空间使用分析与清理
    HeidiSQL、Navicat、mysql命令和source命令导入sql脚本的速度比较
    Centos 7.2天兔(Lepus 3.8)数据库监控系统部署
    MegaCli 监控raid状态
  • 原文地址:https://www.cnblogs.com/wgty/p/12810501.html
Copyright © 2020-2023  润新知