MySQL中有多种存储引擎,InnoDB和MyISAM是两种最常用的引擎。它们的主要区别如下:
- 事务支持:InnoDB支持事务,MyISAM不支持。
InnoDB:
sql
START TRANSACTION;
# ...
COMMIT; # 提交事务
ROLLBACK; # 回滚事务
MyISAM不支持事务,保存数据直接生效。
- 锁定策略:InnoDB采用行级锁,MyISAM采用表级锁。
InnoDB:
sql
SELECT * FROM table1 WHERE ... FOR UPDATE; # 行锁
MyISAM:生成任何DML语句(INSERT、UPDATE、DELETE)都会锁定整张表。
- 外键约束:只有InnoDB支持外键约束,保证数据完整性。
InnoDB:
sql
CREATE TABLE table1 (
...
CONSTRAINT fk_name
FOREIGN KEY (col1)
REFERENCES table2(col2)
);
MyISAM不支持外键约束。
- 支持 FULLTEXT 索引:仅MyISAM支持FULLTEXT索引,用于全文搜索。
MyISAM:
sql
CREATE TABLE table1 (
...
FULLTEXT(col1)
) ENGINE=MyISAM;
InnoDB不支持FULLTEXT索引。
- 表空间大小:InnoDB表空间可以自适应增长,MyISAM表空间大小固定。
总结:
- InnoDB支持事务、外键约束、行级锁,适合业务需要高度完整性和并发性的应用。
- MyISAM支持Full-text索引,查询速度较快,适合业务需要全文检索的应用。
- 如果不需要上述特性,可以选择随意,两种引擎的性能都不错。