Mysql将表引擎MyISAM更改为InnoDB

时间:2014-02-03 12:34:42

标签: mysql innodb myisam

在我的网站上,我有一个1000万行的访问者表。
对网站的每个请求都会向表中插入行,以防表被锁定(通常在优化查询中)访问者无法进入网站
表引擎是MyISAM,我想将其更改为InnoDB
我几乎没有问题:

  • 如何在不停止我的网站工作的情况下更改表格引擎
  • 有一种方法可以在不锁定的情况下优化InnoDB表

2 个答案:

答案 0 :(得分:18)

最简单的方法是

ALTER TABLE table_name ENGINE = InnoDB;

如果您使用InnoDB引擎,则不必担心锁定表,因为此引擎会按行锁定数据。

答案 1 :(得分:5)

oleksii.svarychevskyi是对的,InnoDB使用行级锁,但如果你这样做     

ALTER TABLE table_name ENGINE = InnoDB;
要将 table_name 从MyIsam更改为InnoDB,将会有一个元数据锁定(在表级),因为原始表引擎是MyIsam。
如果您尝试对table_name执行UPDATE,则此UPDATE将排队,直到ALTER TABLE结束(如果您执行SHOW FULL PROCESSLIST,您将看到"等待表元数据锁定"与UPDATE关联的消息) 。