今天进入phpMyAdmin维护数据库时意外发现一个数据库中有一些表使用的MyISAM,另一些表使用的InnoDB,左思右想没确定导致这种问题的原因,因为一般来说一个网站的数据库所有表应该使用同一种引擎,于是想着如何无损地将所有表转换成同一种引擎。
从万能的搜索引擎了解到MyISAM和InnoDB引擎的区别如下。
MyISAM与InnoDB的区别
InnoDB
MyISAM
支持事务处理等
不支持事务处理等。
不加锁读取
支持外键
不支持外键
支持行锁
不支持行锁
不支持FULLTEXT类型的索引
支持FULLTEXT类型的索引
不保存表的具体行数,扫描表来计算有多少行
保存表的具体行数,不带where时,直接返回保存的行数。
DELETE表时,是一行一行地删除
DELETE表时,先drop表,然后重建表
InnoDB把数据和索引存放在表空间里面
MyISAM表被存放在三个文件,frm文件存放表格定义
跨平台可直接拷贝使用
跨平台很难直接拷贝。
InnoDB中必须包含AUTO_INCREMENT类型字段的索引表格很难被压缩
MyISAM中可以使用AUTO_INCREMENT类型字段建立联合索引,表格可以被压缩。
那么,我们如何选择?
MyISAM:应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高。
建议zblog、dedecms、帝国cms、discuz、emlog之类对数据库读写不多的程序使用。
InnoDB:用于事务处理应用程序,支持外键,如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性。更新删除等频繁(InnoDB可以有效的降低由于删除和更新导致的锁定),对于数据准确性要求比较高的,此引擎适合。
建议Wordpress、joomla、phpBB、Drupal之类比较依赖数据库读写的程序使用。
我的网站使用drupal构建的选择InnoDB更合适,下面提供两种经过验证可用的MyISAM转InnoDB方法。
方法一、通过phpmyadmin命令转换。
以我的网站数据库为例。
首先登录phpMyAdmin,点“SQL”。
然后在SQL查询框中输入命令,ALTER TABLE 数据库表名
ENGINE = INNODB; (后面带小写;)例如转换图片中的ban_ip表,命令就是 ALTER TABLE `ban_ip` ENGINE = INNODB; 可一条一行,同时转换多条命令。如下图:
接着点击查询框右下角的“执行”,命令执行成功如下:
如果执行不成功会有提示信息,检查命令的标点符号是否为英文半角输入,还有命令中的 '表名'前后不带空格。
方法二、使用SSH连接在linux中命令转换。
例如当前数据库用户名为root 数据库名为tuhongwei_com 数据库密码为123456 ,要转换的数据库表名为 ban_ip。
首先连接SSH,输入 mysql -uroot -p tuhongwei_com回车,输入数据库密码123456 回车(注意,在linux系统中输入密码屏幕不会提示),登录数据库成功后如下显示:
因为我用的MariaDB所以像上图这样显示,如果是MySQL 前面的MariaDB就显示MySQL。
然后输入命令 alter table ban_ip engine=innodb; (后面英文半角;不要忘记)回车,执行成功后如下提示:
以上就是MyISAM转InnoDB的两种方法,反之InnoDB转MyISAM方法一样,无非是将命令中的engine=myisam。
如果你有其他的转换方法,欢迎评论。
Original url: Access
Created at: 2019-03-27 10:14:05
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论