我只是在查看安装后由drupal创建的MySql数据库。 所有的表都在 MyISAM 中。 使用像drupal这样的复杂软件,这样做不是更有意义吗? 使用外键并因此使用 InnoDB 表来强制引用完整性? 如果没有外键,所有约束检查都将发生在 PHP 结束。
问问题
709 次
1 回答
3
MySQL 提供多种数据库引擎是有原因的——不同的引擎提供不同的优点和缺点。InnoDB 是一个很棒的引擎,它提供了引用完整性和事务安全性,但是它对于网站的用例优化得很差,在这种用例中,你的读取次数比写入次数多。
MyISAM 为大多数点击只需要对数据库进行读取访问的网站提供最佳性能。在这种情况下,通常可以通过编写数据插入和删除来维护引用完整性,如果它们损害完整性,它们将无法成功。例如,而不是写
从 mytable 中删除,其中 id = 5
你可以写
DELETE mytable FROM mytable LEFT JOIN linkedtable ON mytable.id=linkedtable.ref WHERE id = 5 AND linkedtable.ref IS NULL
只有当没有外部引用时,这才会成功删除该行。
于 2009-07-12T10:10:02.293 回答