mysql的存储引擎

存储引擎就是如何存储数据、如何为数据建立索引和如何更新、查询数据等技术的实现方法。

mysql默认支持多种存储引擎,以适用于不同领域的数据库应用需要,用户可以通过选择使用不同的存储引擎提高应用的效率,提供灵活的存储。

  • 查看当前的存储引擎
show variables like '%storage_engine'; --查看当前mysql默认的存储引擎
show engines;  --查看当前mysql版本支持的存储引擎
  • 修改mysql默认的存储引擎

    – 关闭mysql服务

    –找到mysql安装目录下的my.ini文件

    – 找到default-storage-engin = INNODB将其改为其他引擎

    –启动mysql服务

  • mysql常用的存储引擎

功能myisammemoryinnodbarchive
存储限制256TRAM64TNone
支持事务处理NoNoYesNo
支持全文索引YesNoNoNo
支持数索引YesYesYesNo
支持哈希索引NoYesNoNo
支持数据缓存NoN/AYesNo
支持外键约束NoNoYesNo
1. InnoDB

事务性数据库的首选引擎,支持事务安全表(ACID),支持行级锁定和外键约束,innoDB是mysql默认的存储引擎,使用B-tree索引结构。

其特点有:

  • 支持事务处理;具有提交、回滚、崩溃恢复能力。
  • InnoDB是为处理巨大数据量的最大性能设计,它的cpu效率比其他基于磁盘的关系型数据库引擎要高。
  • InnoDB自带缓冲池,可以将数据和索引缓存在内存中。
  • 支持外键完整性约束。
  • 支持行级锁定。
  • 被用在众多高性能需求的大型数据库站点上。
2. MyIsam

MyIsam基于Isam引擎,并对齐扩展。是在web,数据仓储和其他应用场景下最常用的引擎之一。它拥有较高的插入、查询速度,但不支持事务处理。

其特点有:

  • 能更好地支持大文件
  • 当删除、更新、插入混用时,产生更少碎片。
  • 每个MyIsam表最大索引数是64,但可以通过重新编译来改变,每个索引最大的列数是16。
  • 最大的键长度是1000字节。
  • Blob和txt列可以被索引。
  • null被允许存在于索引列中,这个值占每个键的0~1个字节。
  • 所有数字键值以高字节优先被存储以允许一个更高的所有压缩。
  • MyIsam类型表的auto_increment列更新比InnoDB类型的要更快。
  • 可以将数据文件和索引文件存放在不同目录。
  • 每个字符列可以有不同的字符集。
  • 有varchar的表可以固定或动态记录长度,
  • varchar和char列可以达到64K。
  • 只支持表锁
3. Memory

是存储引擎将表中的数据存储到内存中,为查询和引用其他表的数据提供快速访问。

  • 存储引擎的选择

    一般对于插入和并发性能要求较高的,或者需要外键,或需要事务支持的情况,需要选择InnoDB,插入较少,查询较多的场景则优先考虑MyIsam。

  • 使用引擎

    一般在建表的时候添加引擎:

    create table table_name (name char(10)
    )engine=MyIsam charset= utf8--修改存储引擎
    alter table table_name enging = new_enging;
    
  • InnoDB和MyIsam在文件存储方面的区别

    1. InnoDB将一张表存储为两个文件

      • demo.frm ==>存储表的结构和索引,frm文件可以在客户端中使用desc命令读取
      • demo.ibd ==>存储数据,ibd存储是有限的,存储不足自动创建ibd1,ibd2
      • InnoDB的文件创建在对应的数据库中,不能任意移动
    2. MyIsam将一张表存储为三个文件

      • demo.frm ==>存储表的结构
      • demo.myd ==>存储数据
      • demo.myi ==>存储表的索引
      • MyIsam的文件可以任意移动
  • 外键

    MySQL 中的外键用于建立两个表之间的关联关系,确保数据的一致性和完整性。外键是一个表中的一个或多个字段,它与另一个表的主键相关联。

    1. 定义外键

      在创建表的时候,可以通过 FOREIGN KEY 约束来定义外键。例如:

      CREATE TABLE orders (order_id INT AUTO_INCREMENT,customer_id INT,order_date DATE,PRIMARY KEY (order_id),FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
      );
      
    2. 使用add添加外键

      alter table table1 add constraint foreign_key_name foreign key (id) reference table2(id);
      
    3. 删除外键

      ALTER TABLE orders DROP FOREIGN KEY fk_customer_id;
      
    4. 检查外键约束

      SHOW CREATE TABLE table_name;
      
    5. 外键和索引

      外键字段通常会被自动索引,以提高关联查询的性能

    6. 外键和事务

      在事务中,外键约束确保数据的一致性,如果事务中的操作违反了外键约束,事务将被回滚。

    7. 外键和存储引擎

      不是所有的mysql存储引擎都支持外键,myisam存储引擎不支持外键,innoDB则支持。

    8. 外键和性能

      外键可以增加数据的一致性,但也可能影响性能,特别是在有大量数据和复杂关联的情况下,因此,在设计数据库时需要权衡外键的使用。

    9. 数据库的foreign_key_checks系统变量

      使用外键时,需要确保数据库的foreign_key_checks系统变量是开启的,否则外键约束可能不会生效,可以通过以下命令查看和设置改变量:

      -- 查看当前设置
      SHOW VARIABLES LIKE 'foreign_key_checks';-- 设置为 ON
      SET GLOBAL foreign_key_checks = 1;
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14946.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【STM32F1】——无线收发模块RF200与串口通信

【STM32F1】——无线收发模块RF200与串口通信 一、简介 本篇主要对调试无线收发模块RF200的过程进行总结,实现了以下功能。 串口普通收发:使用STM32F103C8T6的USART2串口接收中断,实现两个无线收发模块RF200间的通信。二、RF200介绍 电压:3.4-5.5V工作频率:418~455MHz发…

【MySQL从入门到放弃】InnoDB磁盘结构(二)

前言 前面我们解析了InnoDB磁盘结构中的表空间、数据字典、双写缓冲区。 本文我们继续探究磁盘结构中剩余的几个核心组件:重做日志(redo log)、撤销日志(undo log)、二进制日志(binlog) 一、重做日志 ( redo log ) WAL(Write-Ahead Logging)机制 WAL 的全称是…

Python 绘图工具详解:使用 Matplotlib、Seaborn 和 Pyecharts 绘制散点图

目录 数据可视化1.使用 matplotlib 库matplotlib 库 2 .使用 seaborn 库seaborn 库 3 .使用 pyecharts库pyecharts库 注意1. 确保安装了所有必要的库2. 检查Jupyter Notebook的版本3. 使用render()方法保存为HTML文件4. 使用IFrame在Notebook中显示HTML文件5. 检查是否有其他输…

用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转这些功能

(一)安装插件SystemVerilog - Language Support 安装一个vscode插件即可,插件叫SystemVerilog - Language Support。虽然说另一个插件“Verilog-HDL/SystemVerilog/Bluespec SystemVerilog”也有信号提示及定义跳转功能,但它只能提…

LLM RAG系列:一文详解RAG,看完这篇你必会(文末福利)

RAG系列 本文介绍了RAG以及RAG pipeline的整个流程,包括请求转换、路由和请求构造、索引和检索、生成和评估等,其中引用了大量有价值的论文。 参考Advanced RAG Series: Generation and Evaluation中的5篇文章,并丰富了相关内容。 请求转换…

服务器硬件介绍

计算机介绍 现在的人们几乎无时无刻都在使用电脑!而且已经离不开电脑了。像桌上的台式电脑(桌机)、笔记本电脑(笔电)、平板电脑、智能手机等等,这些东西都算是电脑。 台式机电脑介绍 计算机又被称为电脑。台式机电脑主要分为主机和显示器两个部分&…

docker启动mysql数据库镜像,开启大小写不敏感,开启不区分大小写,挂载数据库日志文件,挂载数据库文件

docker启动mysql数据库镜像,开启大小写不敏感,开启不区分大小写,挂载数据库日志文件,挂载数据库文件 查询数据库是否区分大小写 SHOW VARIABLES LIKE lower_case_table_names;查询数据库是否支持大小写lower_case_table_names 被设置为 1,即表名不区分大小写。如果值为 1…

SpringBoot 打造图片阅后即焚功能

阅后即焚”(Snapchat-like feature)是指一种社交媒体或信息传递功能,用户在阅读某条信息或查看某张图片后,该信息或图片会自动销毁,无法再次查看。这种功能的主要目的是保护用户的隐私和信息安全,防止敏感信…

年轻人应该读毛选(一到五卷)!!!

在线网址:中文马克思主义文库毛泽东 (marxists.org) 书籍的现实意义,往往是在读后很久才能有所体会的。 推荐《毛泽东选集》——智慧与实践的经典之作 今天想给大家推荐一本充满智慧和深刻洞见的书——《毛泽东选集》。这不仅是一本书,更是…

Java期末复习暨学校第六次上机课作业

Java期末复习暨学校第六次上机课作业: 第一题: 通过new关键字实例化了一个Students类对象s,并调用set方法分别赋值,最后调用study和introduce方法。 输出结果: 第二题: 给出了一个无参构造方法和有参构造…

【操作系统】守护进程

一、守护进程的概念 守护进程是一个在后台运行并且不受任何终端控制的进程 二、自己实现守护进程 1.预备知识 (1)/dev/null /dev/null是一个特殊的设备文件,往这个文件里写不进去任何数据,也读不出来任何数据 因此&#xff0…

MySQL数据库常用命令大全(完整版——表格形式)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 ✨特色专栏&#xff1a…

TCP滑动窗口

TCP滑动窗口(Sliding Window) 什么是滑动窗口? TCP滑动窗口是TCP协议中的一种流量控制机制,用于调节发送方和接收方之间的数据传输速率,以避免网络拥塞和提高传输效率。 滑动窗口机制允许发送方在不等待确认应答的情…

main中的int argc, char* argv[],命令行调用函数时输入参数用的

int argc:表示命令行参数的数量。argc 至少为1,因为第一个参数总是程序的名称。char* argv[]:是一个字符指针数组,用于存储每个命令行参数的字符串。argv[0] 是程序的名称,argv[1] 是第一个参数,依此类推。…

Vue 批量注册组件实现动态组件技巧

介绍 Vue 动态组件的应用场景很多,可应用于动态页签,动态路由等场景,其核心原理是批量注册。在Vue2和Vue3中实现原理相同,只是语法略有差异。 Vue2 实现 基于 webpack require.context() 是webpack提供的一个自动导入的API 参数1:加载的文件目录 参数2&#xff…

仓储管理系统-综合管理(源码+文档+部署+讲解)

本文将深入解析“仓储管理系统-综合管理”的项目,探究其架构、功能以及技术栈,并分享获取完整源码的途径。 系统概述 仓储管理系统-综合管理是一个全面的仓库管理解决方案,旨在通过集成多种功能模块来优化仓库操作和管理流程。该系统提供了…

xxl-job 是如何注册、注销、维持存活态

我们通过源码发现,xxl-job主要是由客户端发起的注册和存活上报(心跳检测)的; 主要是执行器在启动时,会初始化一个线程,每隔30秒请求调度中心接口,维护存活状态; 注册接口/上报接口:/api/regis…

Ps:OpenColorIO 设置

Ps菜单:编辑/OpenColorIO 设置 Edit/OpenColorIO Settings 在专业的图像编辑和色彩管理工作流程中,准确的色彩呈现和转换至关重要。OpenColorIO(OCIO) 是一种开源的色彩管理框架,广泛应用于影视、动画和视觉特效行业。…

如何抓取某大学网站专业录取分数

当我们在浏览器中浏览网页时,网页上显示的数据实际上已经被加载到浏览器内存中,只是以一种可视化的方式呈现出来。那么是否有一种简便的方法可以将这些数据从网页中提取出来,并保存为表格格式呢? 这是某大学的专业分数录取情况数…

举例理解LSM-Tree,LSM-Tree和B+Tree的比较

写操作 write1:WAL 把操作同步到磁盘中WAL做备份(追加写、性能极高) write2:Memtable 完成WAL后将(k,v)数据写入内存中的Memtable,Memtable的数据结构一般是跳表或者红黑树 内存内采用这种数据结构一方面支持内存…