为了避免死锁,常常需要指定锁定的资源顺序,例如:当需要同时更新主表(main)和子表(sub)的一条关联记录时,我通常这样写:
select a.aid in v_id from main a where a.aid = 123 for update;
select b.aid in v_id from sub b where b.aid = 123 for update;
这个顺序表示了,先加锁主表,再加锁子表中aid=123的记录。
现在问题是:
1.如果我这样写
select a.aid in v_id from main a inner join sub b on a.aid=b.aid where a .aid=123 for update;
这样写,加锁的顺序是否和上面的写法是一样的?效果是否也是一样的?
2.第二种写法:
select a.aid in v_id from main a inner join sub b on a.aid=b.aid where a.aid=123 for update of a.aid,b.aid;
如果第一种写法不行,第二种写法是否能达到我的最初意愿?如果上面的2中方法都不行,那应该怎么样做?
(多for update的 join[包括left join和right join]时,非常不太清楚,怎么锁多表多行的,它的内在算法或者加锁顺序原理如何不太懂,最好能帮我找到这么篇文章或指点小弟一下!!!万分感激)