代码之家  ›  专栏  ›  技术社区  ›  John M.

如果使用MySQL事务,我必须考虑哪些差异?

  •  2
  • John M.  · 技术社区  · 15 年前

    最近有人告诉我,我应该在我的应用程序中使用事务,因为它们可以帮助更快地运行代码,并防止mysql代码在整个页面加载之前执行(例如,如果有人正在刷新我的页面,而整个页面未加载,则不会启动mysql调用,这会降低服务器上的负载。)

    我想知道我是否想将我的站点切换到事务,这有多困难,我必须做什么更改?

    另外,我使用的是PDO,而不是 mysql_* 如果那样会有什么不同吗?

    4 回复  |  直到 15 年前
        1
  •  4
  •   Pascal MARTIN    15 年前

    在Web应用程序中,事务通常用于 Atomicity 为了 Isolation .


    他们不 禁止在加载整个页面之前执行MySQL代码 “:当调用 mysql_query (或使用PDO或 mysqli_* ) . 但如果不提交事务,它们都将被“取消”。

    他们也与帮助没有太多关系。” 更快地运行代码 “即使有时它们也会产生这种效果,这只是因为如果您不显式地将事务用于一组查询 (仅产生一个交易) ,MySQL将为每个查询隐式使用一个事务 (导致多个事务,这可能会在DB服务器上增加一些额外的负载)

    笔记:

    • 当然,这是使用一个支持事务的数据库引擎——比如innodb。
    • 对于“更快”这一点,我已经看过几次了;但是在特殊情况下,我需要的速度比酸还快——或者可能只是服务器上的负载问题(这意味着如果您想沿着这条路径走,您必须进行分析,以了解在特定情况下什么更快!)


    使用PDO, mysql_* MyQuiLi* 在这里不应该有太大的区别——即使建议不要使用 MyQuL** (旧的,不支持mysql>=4.1的某些功能,如准备好的语句) .

        2
  •  1
  •   Bill Karwin    15 年前

    实际上,你使用的是交易 已经 使用RDBMS时。但是,除非你 明确的 关于事务何时开始和完成,您隐式地允许每个SQL语句开始和完成一个单独的事务。这也称为“自动提交”。

    事务是通过多个SQL语句进行逻辑更改集的好工具,因此可以将整个更改集作为一个单元提交或回滚,并确保更改使数据库保持一致状态。交易主要不是为了提高绩效。

    启动和完成任何事务都有很小的开销。如果将隐式事务用于大容量的更改,这将得到放大,从而导致每个语句的开销。例如,如果您运行数千个 INSERT 执行大容量数据加载的语句,每个 插入 隐式地在单独的事务中。在其他情况下,使用事务与不使用事务的性能优势是微不足道的,特别是在像PHP这样具有“不共享”体系结构的语言中。

        3
  •  0
  •   Alex Budovski    15 年前

    事务提供酸,而不是使您的“代码更快”。

    如果有的话,他们会让速度变慢。我建议你在得出这样的结论之前对交易做更多的研究。

        4
  •  0
  •   Alix Axel    15 年前

    我不知道MySQL的事务处理速度,但是在sqlite中,事务的使用速度通常更快,但是我相信在MySQL中,事务处理速度应该会减慢。

    关于你需要做的改变…几乎没有:

    BEGIN TRANSACTION
    $result = [execution of several queries]
    if $result fails -> ROLLBACK, else COMMIT
    

    我还建议您在mysql i或mysql上使用pdo。