繁体   English   中英

PDO交易锁?

[英]PDO Transactions Locks?

我已经通过PHP PDO接口对MySQL事务进行了广泛的研究。 对于事务处理方法的实际背景工作,我还是有些模糊。 具体来说,我需要知道是否有什么原因可以防止从脚本开始到结束的事务中的所有查询(包括SELECT)? 当然,处理事务中的任何错误并在需要时将其回滚。

我想知道在事务期间是否有任何锁定,如果是,那是因为它是InnoDB,所以行级锁定吗?

不要那样做

这样做的原因是,事务利用了MVCC这一机制,通过该机制,每条更新的数据实际上都不是就地更新,而只是插入到其他地方。

MVCC意味着分配内存和/或存储空间来累积和操作您发送的所有更改,而无需将它们提交到磁盘,直到发出COMMIT为止。

这意味着在整个脚本运行期间,所有更改都将存储到脚本结束为止。 并且您在事务期间尝试和更改的所有记录都被标记为“进行中的工作”,以便其他进程/线程可以知道该数据将很快失效。

在脚本的整个长度上将某些数据标记为“正在进行中”,意味着任何其他并发更新都将看到该标记,并说“我必须等到完成后才能获取最新数据”。

这包括SELECTS具体取决于隔离级别。 选择标记为“进行中的工作”的东西可能不是您想要的,因为您可能要联接的某些表可能包含已更新的数据,而其他表未更新却导致脏读。

操作的事务性和原子性是可取的,但成本很高。 在需要的地方使用它。 是的,这意味着您需要做更多的工作来弄清楚哪里可能发生竞争状况,即使发生竞争状况,您也必须决定它们是否真的很关键或是否可以接受“某些”数据丢失/混合。

您希望您的日志和访问计数器以及其他统计信息降低您整个网站的速度吗? 还是信息的质量可以牺牲速度(只要它不是分析工具,您就可以承受偶尔的碰撞)。

您是否希望座位预订应用程序失火并允许更多用户即使座位号为0仍能抢到座位? 当然不是-在这里您想利用事务和隔离级别来确保永远不会发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM