我有2个cron进程并行运行。
进程1执行插入,进程2读取这些插入。
我遇到的问题是进程1需要在进程2读取之前插入多行。
例如, 1.流程1需要插入10行
流程1插入3行
流程2读取这3行
进程1插入行4..10
进程2读取行4..10
我需要的是
处理1行插入1..10
进程2读取行1..10
A)我是否锁定了流程1中插入的表格?
B)我是否进行了开始事务,插入,然后提交?
如果表被锁定,其他会话将解锁什么或其他会话是否会收到锁定错误/警告?
答案 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中的查询非常重要,所以你可能希望在那里使用一些魔法。
如果要确保以原子方式添加所有插入,可以将插入包装在事务内部,但是仍然需要锁定表以解决并发问题。