3
使用InnoDB,當調用BEGIN
時,MySQL事務鎖定新創建的行,然後在調用commit時解鎖它們? 例如:MySQL正在更新和/或選擇InnoDB中的行鎖定行
$query = "INSERT INTO employee (ssn,name,phone)
values ('123-45-6789','Matt','1-800-555-1212')";
mysql_query("BEGIN");
$result = mysql_query($query);
mysql_query("COMMIT);
是否INSERT
聲明鎖定該行直至COMMIT
被調用,或者是回滾,以防止對其進行修改其他併發連接? 如果沒有,您是否只能通過調用select FOR UPDATE鎖定某個事務中的某個塊的讀取和任何修改?
因此,無論是插入,更新還是選擇語句,並且在事務中調用,它都遵守酸序列化,因此被鎖定(不能被其他事務讀取或寫入?) – tommo
默認情況下是。除了將--transaction-isolation選項配置爲其他內容。欲瞭解更多信息,請閱讀http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html – vidaica
當你說「新創建的記錄被創建時,它對其他連接是不可見的,所以有不需要鎖定它「如果記錄不是新的,而不是插入,'update'被稱爲?要更新的表需要被事務中的FOR UPDATE鎖定爲true?請參閱:http://www.databasejournal.com/features/mysql/article.php/10897_3382171_2/Transactions-in-MySQL.htm – tommo