我想了解InnoDB的鎖定機制。請幫我理解MySQL InnoDB事務
比方說,我有以下的PHP腳本:
mysql_query('BEGIN;');
$a=mysql_query('SELECT id, status FROM testtable WHERE id=123 LIMIT 1 FOR UPDATE;');
$res=mysql_fetch_assoc($a);
$b=somefunction($res['id']);
$c=someotherfunction($b);
mysql_query('UPDATE testtable SET status=1 WHERE id=123;');
mysql_query('COMMIT;');
內somefunction()和someotherfunction(),我們會做很多其他的查詢從同一個表,也可以從其他表。它甚至從id = 123的測試表中選擇其他字段。
我是否明白,在本次會議中,我可以做任何我想要的id = 123,但其他會話將等待鎖被釋放?
因爲我在第一個查詢中使用'for update',這是測試表中唯一被鎖定的行。在同一會話中選中/更新/插入的任何其他表或行都保持不變(解鎖)?
如果someotherfunction()選擇並更新id = 123上的不同字段會發生什麼?這可能嗎?鎖持續嗎?