mysql - 多次插入后如何提交

时间:2011-07-28 18:29:14

标签: mysql transactions cron

我有2个cron进程并行运行。

进程1执行插入,进程2读取这些插入。

我遇到的问题是进程1需要在进程2读取之前插入多行。

例如,  1.流程1需要插入10行

  1. 流程1插入3行

  2. 流程2读取这3行

  3. 进程1插入行4..10

  4. 进程2读取行4..10

  5. 我需要的是

    1. 处理1行插入1..10

    2. 进程2读取行1..10

    3. A)我是否锁定了流程1中插入的​​表格?

      B)我是否进行了开始事务,插入,然后提交?

      如果表被锁定,其他会话将解锁什么或其他会话是否会收到锁定错误/警告?

2 个答案:

答案 0 :(得分:3)

不要锁定桌子。使用交易。交易是原子的。

答案 1 :(得分:0)

如果你需要阻止进程2直到进程1完成,你应该按照你的建议锁定有问题的表。

如果在单个查询中插入所有10行,则可以依赖MyISAM表锁定,但是,如果使用单独的查询插入或使用InnoDB,则需要使用[LOCK TABLES]显式锁定表。在过程1中写入(WRde](http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html)并在完成后释放锁。

然后,在从表中读取之前,进程2将慷慨地等待写锁定被释放。

这里确保服务器首先接收进程1中的查询非常重要,所以你可能希望在那里使用一些魔法。

如果要确保以原子方式添加所有插入,可以将插入包装在事务内部,但是仍然需要锁定表以解决并发问题。