MyISAM和InnoDB介绍及切换存储引擎方法

MyISAMInnoDB 都是 MySQL 数据库管理系统中常用的存储引擎(Storage Engine)。存储引擎决定了数据库如何存储、读取、更新数据以及如何管理事务、锁定等操作。

1. MyISAM 存储引擎

MyISAM 是 MySQL 的默认存储引擎之一,尤其是在早期版本中(5.5 之前)。它提供了一些简单、快速的操作,但也存在一些限制。

特点:
  • 非事务性:MyISAM 不支持事务处理(ACID 属性)。这意味着它不支持像 InnoDB 那样的事务管理(如 COMMITROLLBACK 等)。
  • 表级锁:MyISAM 采用表级锁定,即在执行写操作时,整个表会被锁定,其他查询只能等待该操作完成。这可能在并发写入操作较多时造成性能瓶颈。
  • 高速读取:对于大多数以读取为主的应用,MyISAM 通常比 InnoDB 快,因为它没有事务和行级锁的开销。
  • 不支持外键约束:MyISAM 不支持外键约束,意味着无法在表之间创建参照完整性。
  • 存储格式:数据存储在 .MYD 文件中,索引存储在 .MYI 文件中。
优点:
  • 对于只读或者读多写少的应用场景,MyISAM 的性能表现非常好。
  • 存储空间相对较小。
缺点:
  • 不支持事务。
  • 不支持外键约束。
  • 只支持表级锁,可能导致在高并发写操作时的性能问题。
使用场景:
  • 适合对数据一致性要求不高且主要是查询操作的场景,如日志系统、统计数据表等。

2. InnoDB 存储引擎

InnoDB 是 MySQL 最常用的存储引擎,默认启用的引擎(从 MySQL 5.5 开始),支持更多的高级功能,尤其是在数据一致性、事务处理和高并发处理方面。

特点:
  • 事务支持:InnoDB 完全支持事务(ACID 属性),包括 COMMITROLLBACKSAVEPOINT 等功能。支持自动提交和显式提交事务。
  • 行级锁:与 MyISAM 的表级锁不同,InnoDB 支持行级锁,能更精细地控制锁定粒度,从而减少并发时的冲突,提升性能。
  • 支持外键约束:InnoDB 支持外键约束,能够保证数据的参照完整性。外键用于定义表与表之间的关联。
  • 崩溃恢复:InnoDB 提供了崩溃恢复机制,通过写日志(Redo Log 和 Undo Log)来确保数据一致性,即使发生崩溃,也能恢复到一致的状态。
  • MVCC(多版本并发控制):通过使用快照隔离(snapshot isolation),InnoDB 可以避免读写冲突,提高并发性能。
  • 存储格式:数据存储在 .ibd 文件中(或共享表空间中的文件),索引存储在 .ibd 或共享表空间中的其他位置。
优点:
  • 支持事务(ACID)。
  • 支持行级锁,能够在高并发情况下提供更好的性能。
  • 支持外键,保证数据的参照完整性。
  • 提供崩溃恢复和高可靠性。
缺点:
  • 相较于 MyISAM,InnoDB 的性能在简单的查询和读操作中可能稍逊一筹,因为它需要管理更多的事务和锁。
  • 存储空间相对较大,尤其是在启用了事务日志和索引时。
使用场景:
  • 适合需要事务支持、数据一致性和高并发写操作的场景,如电商平台、金融系统、用户管理系统等。

总结对比:

特性MyISAMInnoDB
事务支持不支持事务完全支持事务(ACID)
锁机制表级锁表级锁、行级锁
外键支持不支持外键约束支持外键约束
崩溃恢复不支持,崩溃时可能丢失数据支持崩溃恢复
性能高效的读操作,写操作性能较差写操作可能稍慢,但更适合高并发场景
适用场景主要是只读查询或查询多于写的场景需要事务、数据一致性和高并发的场景

选择合适的存储引擎

  • MyISAM:适用于读多写少的应用场景,对数据一致性要求不高,或者不需要事务支持。
  • InnoDB:适用于需要事务支持、高并发、高可靠性及外键约束的场景,尤其是现代的 Web 应用和企业级应用。

3.在 Navicat 中切换 MySQL 表的存储引擎

(例如,从 MyISAM 切换到 InnoDB)非常简单。你可以按照以下步骤操作:

步骤 1:连接到数据库

  1. 打开 Navicat 并连接到你的 MySQL 数据库服务器。

步骤 2:选择数据库

  1. 在 Navicat 左侧的 数据库连接 面板中,选择你要操作的数据库。

步骤 3:选择要修改的表

  1. 在右侧的 列表中,找到并右键点击你想修改存储引擎的表。

步骤 4:进入表的设计视图

  1. 右键点击目标表,选择 “设计表”(Design Table)。

步骤 5:修改存储引擎

  1. 在表设计视图中,找到 “存储引擎”(Engine) 选项,这个选项通常位于界面下方,或者在表的属性设置中。 在这里插入图片描述
  2. “存储引擎” 下拉菜单中,选择你需要的存储引擎:
    • 选择 InnoDB 来将表的存储引擎切换为 InnoDB。
    • 选择 MyISAM 来将表的存储引擎切换为 MyISAM。

步骤 6:保存更改

  1. 修改存储引擎后,点击 “保存”(Save)按钮,或者按 Ctrl + S 保存更改。

步骤 7:确认更改

  1. 如果表的数据较大或表在使用中,修改存储引擎可能需要一些时间。完成后,你可以通过执行 SHOW TABLE STATUSDESCRIBE your_table_name 查询表的存储引擎,确认更改是否成功。

例如,执行以下 SQL 语句:

SHOW TABLE STATUS LIKE 'your_table_name';

你可以在查询结果中的 Engine 列看到表当前使用的存储引擎。

另外的 SQL 方法

你也可以通过 SQL 语句来修改存储引擎。以下是 SQL 命令:

将表的存储引擎更改为 InnoDB
ALTER TABLE your_table_name ENGINE = InnoDB;
将表的存储引擎更改为 MyISAM
ALTER TABLE your_table_name ENGINE = MyISAM;

在执行这些 SQL 语句时,需要确保表中没有正在进行的操作,否则修改存储引擎的操作可能会被阻塞。

注意事项

  • 在切换存储引擎时,请确保表的数据量不是很大,特别是在生产环境中,修改存储引擎可能会导致暂时的性能下降或锁定。
  • 如果表包含大量数据,建议在低峰时段进行更改。
  • 对于需要事务支持的应用,建议使用 InnoDB 存储引擎,因为它提供了更好的事务支持和数据一致性保障。

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

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

相关文章

什么是嵌入式?

目录 一、什么是嵌入式 二、嵌入式系统的特点 (一)专用性与隐蔽性 (二)高可靠性与实时性 (三)资源固定与小型化 三、嵌入式系统的发展历史 (一)20 世纪 60 年代早期雏形 &am…

在几分钟内将数据从 Oracle 迁移到 ClickHouse

ClickHouse 是一个开源的面向列的数据库管理系统。它在实时数据处理方面的出色性能显着增强了数据分析和业务洞察力。将数据从 Oracle 迁移到 ClickHouse 可以释放数据在决策中的力量,这是单独使用 Oracle 无法实现的。 本教程介绍如何使用 BladePipe 将数据从 Orac…

Linux网络:HTTPS协议

Linux网络:HTTPS协议 加密方式对称加密非对称加密混合加密中间人攻击 证书数据签名CA认证 HTTPSSSL/TSLHTTPS 在HTTP协议中,所有的数据都采用明文的形式传输,这就会导致数据非常容易泄露,只要拿到HTTP报文,就可以窃取各…

(计算机毕设)基于springboot免税商品购物商城的设计与实现

博主可接毕设设计!!! 各种毕业设计源码只要是你有的题目我这里都有源码 基于springboot免税商品购物商城的设计与实现 摘 要 Abstract 第一章 绪论 1.1 课题开发的背景 1.2 课题研究的意义 1.3 研究内容 第二章 系统开发关键技术…

计算机能力挑战赛c语言2024

先看看答题页面长啥样:选择题15道,编程题4道 选择题(楼主个人答案) 编程题

Java集合HashMap——针对实习面试

目录 Java集合MapHashMap的特性是什么?HashMap和Hashtable的区别?HashMap和HashSet的区别?HashMap和TreeMap的区别?说说HashMap的底层实现什么是hash冲突?有什么办法减少hash冲突?为什么HashMap的容量总是2…

数据结构:图(二)---- 最小生成树算法

接着上回的分享,继续分享一下图中比较重要的一类应用 那就是求最小生成树 最小生成树的定义 连通图中的每一棵生成树,都是原图的一个极大无环子图,即:从其中删去任何一条边,生成树 就不在连通;反之&#xf…

编程语言的前后端分离:可用JavaScript运行时作为后端的语言及与传统编程语言的对比 -Typescript、Nim、Moonbit

在现代软件开发中,编程语言的**“前后端分离”**概念鲜有提及,却是语言设计与实现的重要基石。这里的“前端”并非指 Web 开发中的界面部分,而是编程语言实现中的语法解析、词法分析等部分;“后端”则指生成可执行代码或中间代码的…

【蓝牙协议栈】【BLE】【BAS】精讲蓝牙电池服务

1. 蓝牙电池服务(Bluetooth Battery Service)概念 蓝牙电池服务是蓝牙设备与其他设备通信时用于报告其剩余电池电量的标准服务。它让用户能够随时了解蓝牙设备(如无线耳机、智能手表、蓝牙鼠标/键盘等)的电池状态,从而方便地管理这些设备的续航与电源使用。 BAS通常用于在…

dnaMethyAge包学习笔记

1.introduction 许多对甲基化年龄进行计算的文章都是采用网站实现计算的,能够实现对甲基化年龄的计算的R包相对比较少,其中应用最广的是dnaMethyAge包。作者本想寻找能够计算Grimage和Grimage2的R包,奈何没有寻找到,因此只能记录一…

详解八大排序(四)------(归并排序)

文章目录 前言:1 递归版本(MergeSort)1.1 核心思路1.2 实现代码 2 非递归版本(MergeSortNonR)2.1 核心思路2.2 实现代码 3.完整代码 前言: 归并排序的核心思路是把数组里面的数两两分成一组,组内…

商城小程序的流程渠道拓展

传统印象里,小程序的开发制作似乎很难,尤其是商城类型且功能体系完善的,事实也确实如此,没有较高的技术和成本投入或团队各个流程的专业人员合作,很难开发出来成品,或者质量较低。 当然对于大公司来说&…

小程序-基于java+SpringBoot+Vue的超市购物系统设计与实现

项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

Android开发-Pokémon界面设计

实现效果图,还没更新完 二、功能说明: 在上次实验的基础之上把recycleviewb列表完善并且增加点击效果,点击之后可以跳转到另外一个activity上,并且添加返回按钮,可以放回原列表页面,列表中的每一行都对应的…

jenkins的安装(War包安装)

‌Jenkins是一个开源的持续集成工具,基于Java开发,主要用于监控持续的软件版本发布和测试项目。‌ 它提供了一个开放易用的平台,使软件项目能够实现持续集成。Jenkins的功能包括持续的软件版本发布和测试项目,以及监控外部调用执行…

HopToDesk 安全加密、免费开源,远程桌面新选择!

远程桌面工具越来越成为现代工作生活的刚需。你是否还在为寻找一个既安全又免费的工具而苦恼?HopToDesk,一款支持安全加密、免费开源的远程桌面软件,或许正是你的不二之 HopToDesk与传统的远程桌面工具相比有哪些独特优势?它如何…

yum工具的学习

Linux下安装软件的方法 1.源代码安装 2.rmp包安装 3.包管理器进行安装 --- yum/apt Linux下载软件的过程 操作系统的好坏评估 -- 生态问题 yum具体操作 Linux软件安装所有人都能用,是以other的身份去执行可执行程序 文件拷贝(sudo)-- &g…

react 如何修改弹出的modal的标题

原来标题的样子&#xff1a; 修改为&#xff1a; 实现方式&#xff1a; <Modal title<span>股价趋势/{this.state.pccode}</span> visible{this.state.isPriceModalOpen} style{{ top: 20 }} width{1320} height{400} footer{null} onCancel{()>this.hideMo…

计算机网络-理论部分(一):概览

重点 计算机网络的重点是协议&#xff0c;各种协议&#xff0c;每种协议都有自己对应的应用场景以及对应功能&#xff0c;学好协议&#xff0c;就学好了计算机努网络。 协议分层 协议分层围绕数据的传递展开。数据的传递需要包括&#xff1a;打包数据&#xff0c;控制传递&a…

开源科学工程技术软件介绍 – EDA工具KLayout

link 今天向各位知友介绍的 KLayout是一款由德国团队开发的开源EDA工具。 KLayout是使用C开发的&#xff0c;用户界面基于Qt。它支持Windows、MacOS和Linux操作系统。安装程序可以从下面的网址下载&#xff1a; https://www.klayout.de/build.html KLayout图形用户界面&…