使用InnoDB,如果有一个进程从表中读取而另一个进程写入同一个表,是否存在争用问题?
答案 0 :(得分:1)
是的,存在争议。但InnoDB非常努力(1)尽量减少对用户的影响,(2)解决导致“冲突”的争用。
读者会挂起他们正在查看的行,但只能阻止写入在完成之前更改值。 (这是一个冗长,复杂的主题,涉及"事务隔离模式"等。)
写入者阻止行以防止其他写入踩到他们的脚趾。
如果两个线程试图触及同一行,则其中一个线程可能会被迫等到另一个线程完成其事务处理。
在一个更极端的情况下,每个线程都在等待另一个线程,一个"死锁"被发现了。这导致一个交易被回滚"。
结论:争用很少成为问题。但是,您应该在每个SQL语句之后检查错误,以防万一出现死锁。