我们尝试使用SELECT ...对于更新和选择...LOCK IN SHARE模式,但是我们得到了死锁,这对数据库服务器来说是繁重的操作。对于测试,我们打开了两个终端,并一步一步地做了:mysql> start transaction;
mysql> SELECT SUBSCRIPTION_ID FROM TEST_SUBSCRIBERSWHERE s.SERVICE_ID="web-sub-1" AND s.MSISDN="000000002" FOR UPDAT
SELECT * FROM XYZ WHERE ABC = DEFUPDATE XYZ SET ABC = 123通常情况下,事务由两个线程启动,并根据隔离级别发生死锁导致死锁的查询顺序是什么?我读过一些关于锁(共享的、独占的)和每个隔离级别的锁持续多长时间的文章,但我仍然不完全理解……
我甚至准备了一个简单的测试,它总是导致死锁。我没有注意到使用ReadCommitted的死锁,但我担心它们可能会发生。你有什么建议的解决方案?
UPDATESELECT * FROM mytable WHERE id IN (6, 3, 2, 1) FOR UPDATE
由于Postgresql以不一致的顺序获取行锁,是否有可能发生死锁例如,如果Postgresql按本例中in的顺序获取行锁,则可能出现死锁。或者Postgresql在内部是否足够聪明,能够始终以同一表上的同时、离散的SELECT FOR UPDATE语句不能彼此死锁的方式获得行锁(例如,总是按主键顺序获取行锁)?如果Postgresql不自动阻止此类死锁的发生,那么是否有办法修改查询以