MyISAM是MySQL中一种常见的存储引擎,在MySQL 5.5之前它是默认引擎。它结构简单、读取速度快,适合以读为主且不需要事务的业务场景。下面介绍在实际开发中怎么使用MyISAM。

一、创建MyISAM表
在创建表时,可以通过 ENGINE 选项显式指定使用 MyISAM 存储引擎。如果未指定且数据库默认引擎为 MyISAM,则会自动使用该引擎。
-- 创建一张 MyISAM 引擎的表
CREATE TABLE article (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
content TEXT,
PRIMARY KEY (id),
FULLTEXT KEY ft_title (title)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
上面示例中,我们在建表语句末尾写了 ENGINE=MyISAM,这样该表就会使用 MyISAM 引擎,同时我们建立了一个全文索引用于标题搜索。
二、查看与修改表的引擎
可以使用 SHOW TABLE STATUS 命令查看某张表当前使用的存储引擎。
-- 查看表的引擎信息 SHOW TABLE STATUS LIKE 'article';
如果想把已经存在的 InnoDB 表改成 MyISAM,可以用 ALTER TABLE 语句。
-- 将表引擎修改为 MyISAM ALTER TABLE article ENGINE=MyISAM;
三、MyISAM的使用特点
在使用 MyISAM 时,需要清楚它的一些关键特性,避免误用。
- 不支持事务,无法用 COMMIT 和 ROLLBACK 控制数据一致性。
- 只支持表级锁,写入频繁时容易出现锁等待。
- 支持 FULLTEXT 全文索引,适合做简单搜索。
- 表由三个文件组成:.frm 结构文件、.MYD 数据文件、.MYI 索引文件。
四、适用场景与示例
假设我们有一个访问量较大、很少更新的新闻表,用 MyISAM 就比较合适。
-- 新闻表使用 MyISAM
CREATE TABLE news (
id INT NOT NULL AUTO_INCREMENT,
headline VARCHAR(200),
body TEXT,
PRIMARY KEY (id),
FULLTEXT KEY ft_headline (headline)
) ENGINE=MyISAM;
对于这种以展示和搜索为主、几乎不修改历史数据的表,MyISAM 的读性能和全文索引能发挥作用。
五、注意事项
MyISAM 在崩溃后可能损坏表,需定期用 REPAIR TABLE 修复,且它不支持外键约束。
如果你的业务要求数据强一致、有事务或外键关联,应选择 InnoDB 而不是 MyISAM。明确需求后再决定怎么用 MySQL 的存储引擎,才能少踩坑。