【发布时间】:2012-08-01 15:14:49
【问题描述】:
我正在开发将由多个通勤者运行的应用程序。我想锁定mysql表,这样就不会有进程并发问题,比如一个进程在写,另一个进程同时在读。或者更糟糕的是,这两个过程同时写入(更新)不同的值。 MySQL 提供了锁,但文档说我们应该避免在 InnoDB 中使用锁。 Read here。请提供一些建议,在这种情况下该怎么做。谢谢大家。
【问题讨论】:
我正在开发将由多个通勤者运行的应用程序。我想锁定mysql表,这样就不会有进程并发问题,比如一个进程在写,另一个进程同时在读。或者更糟糕的是,这两个过程同时写入(更新)不同的值。 MySQL 提供了锁,但文档说我们应该避免在 InnoDB 中使用锁。 Read here。请提供一些建议,在这种情况下该怎么做。谢谢大家。
【问题讨论】:
InnoDB 是一个完全支持 ACID 的事务性存储引擎。 InnoDB 的属性之一是它处理并发更新。具体如何取决于隔离级别,但通常 InnoDB 不允许两个事务通过锁定行来修改同一行。它不会锁定整个表,因此其他记录可以被其他事务修改。
如果您将隔离级别设置为serializable,应用程序将工作,因为根本没有并发,但仍然允许一些并发。
隔离级别越高,你的并发量就越少,但如果你锁定表,你的并发量仍然会更多。
【讨论】: