【问题标题】:Preview result of update/insert query without comitting changes to database in MySQL?预览更新/插入查询的结果而不对 MySQL 中的数据库进行更改?
【发布时间】:2010-04-14 12:50:37
【问题描述】:

我正在编写一个脚本来将 CSV 文件导入到我的数据库中的现有表中。我决定自己使用 PHP 和 INSERT/UPDATE 语句进行插入/更新操作,而不是使用 MySQL 的 LOAD INFILE 命令,我有充分的理由这样做。

我想做的是模拟插入/更新操作并向用户显示结果,然后让他们选择确认这是好的,然后将更改提交到数据库。

我正在使用支持事务的 InnoDB 数据库引擎。不确定这是否有帮助,但正在考虑插入/更新、查询数据、显示给用户,然后提交或回滚事务?

任何建议将不胜感激。

【问题讨论】:

    标签: php mysql transactions innodb


    【解决方案1】:

    更简单的方法就是这样。

    在预览页面上:

    1. 缓冲你的 php 输出
    2. 开始交易
    3. 进行插入和更新
    4. 选择您的数据
    5. 随心所欲地输出
    6. 回滚

    然后在确认页面上:

    1. 缓冲区输出
    2. 开始交易
    3. 进行插入和更新
    4. 提交
    5. 输出你想要的东西

    【讨论】:

    • 我可能也是这样做的。不要忘记祈祷没有其他人修改其间的数据;)
    • 有什么方法可以锁定表格直到完成。它需要允许选择,但如果我可以锁定对表进行的插入/更新会很好。
    • 不使用 Mysql 魔法。脚本完成后,甚至 php 的信号量也会被释放。所以你必须推出自己的信号量系统。祝你好运。 en.wikipedia.org/wiki/Semaphore_%28programming%29
    【解决方案2】:

    您可以将数据导入单独的“导入”表。向用户显示表格的结果。如果他单击“确定”,则将该数据复制到主表并删除导入表。如果他单击“取消”,只需删除导入表。

    导入表名应该由用户选择,这样不同的用户就不会覆盖他们的表。

    事务在这里对您没有帮助,因为当 PHP 导入脚本完成时事务将回滚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 2019-12-08
      • 2020-07-19
      相关资源
      最近更新 更多