使用InnoDB,当调用BEGIN
时,MySQL事务是否会锁定新创建的行,并在调用commit时解锁它们?
例如:
$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
会在所选记录上放置一个锁定,如果任何所选记录仍然被锁定,则选择将等待锁定释放后才返回结果。 - vidang