【问题标题】:Changing Joomla tables engine to InnoDB将 Joomla 表引擎更改为 InnoDB
【发布时间】:2023-03-30 04:04:02
【问题描述】:

我用 JAVA 编写了一个将文章添加到 Joomla 站点的应用程序。
我的问题是插入文章需要运行五个查询(将文章添加到content 表,将相应节点插入assets 表,更新assets 表中的其他节点并为插入的文章设置资产ID);并且正因为如此,我的 JAVA 应用程序在远程机器上运行,很多问题都可能导致这些查询中的任何一个失败,如果其中任何一个失败,整个assets 表中断。
我考虑过使用事务和手动提交来解决这个问题,但 Joomla 的存储引擎(MyISAM)不支持事务。所以考虑将这两个表的存储引擎转换为“InnoDB”。
它是否正确 ?它不会给 Joomla 带来问题吗(例如在与其他使用 MyISAM 的表连接时)? 它会影响现场并使其变慢吗?
是否有其他解决方案(例如将所有 5 个查询发送到服务器以按顺序运行)?

谢谢

【问题讨论】:

    标签: mysql joomla transactions innodb myisam


    【解决方案1】:

    一些想法:

    1. 我不完全确定,但我不认为 Joomla 应该对 InnoDB 有任何问题。在 JOIN 中加入 MyISAM 和 InnoDB 表时,MySQL 在内部将 InnoDB 转换为 MyISAM。但我不是 Joomla 人,我仍然不能确定

    2. 为什么不使用触发器 - content 上的 AFTER INSERT 触发器?

    3. 您也可以编写一个存储过程来运行所有 5 个 INSERT,但同样不会有任何事务支持

    4. 创建一个表来保存来自所有 5 个 INSERT 查询的所有数据。当然,这张表只是间歇性的。现在创建另一个存储过程,然后将所有数据从这个中间表迁移到相应的表中。

    希望以上内容有意义!

    【讨论】:

    • 嗨,谢谢;触发器不会对 joomla 自己的查询造成问题吗?我的意思是当我创建一个 AFTER INSERT 触发器时,它在我的远程应用程序查询(应该)和 joomla 本身的查询(不应该!)上运行;可以将触发器配置为仅在我的远程应用程序查询上运行吗?
    猜你喜欢
    • 2014-02-26
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多