在开发mysql锁的共享模式被描述为..。
SELECT ... LOCK IN SHARE MODE sets a shared mode lock on the rows read. A shared mode lock enables other sessions to read the rows but not to modify them. The rows read are the latest available, so if they belong to another transaction that has not yet committed, the read blocks until that transaction ends.
这是否意味着如果我直接打电话给
$dbc -> beginTransaction();或者是commit还是rollback,那么读取的数据将是最新的吗?因为它还说使用FOR UPDATE会阻止LOCK IN SHARE MODE阅读(即确保它是最新的信息)。
但是,如果我在事务中包装了所有重要的更新和删除,那么是否仍然需要锁行,上面说LOCK IN SHARE MODE将等待事务完成?当然,如果它等待事务完成,那么本质上,我将始终拥有可用的最新鲜的数据,只需使用事务,而不必在执行更新和删除时锁定?
发布于 2012-01-02 16:52:14
执行SELECT...LOCK IN SHARE MODE可以阻止UPDATE...LOCK IN SHARED MODE。死锁仍有可能发生。SELECT或UPDATE所需的行仍然可以引入您从未打算发出的锁。我什么意思?
为了您自己的利益,有时需要内部锁定主键条目。
我曾经写过三篇文章,帮助开发人员意识到这一点:InnoDB死锁是否仅用于插入/更新/删除?
https://dba.stackexchange.com/questions/10010
复制相似问题