php - MySQL 事务是否锁定正在更新和/或选择的 InnoDB 中的行

标签 php mysql sql transactions

使用 InnoDB,MySQL 事务是否在调用 BEGIN 时锁定新创建的行,然后在调用 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 仅锁定事务中的一行,从而阻止读取和任何修改?

最佳答案

在提交事务之前,新创建的记录对其他连接是不可见的。其他连接无法修改,所以不需要加锁。

关于php - MySQL 事务是否锁定正在更新和/或选择的 InnoDB 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472075/

相关文章:

php - 如何在 laravel 测试中获取 header 值

php - XAMPP 是否支持 SQL Server?

php - 图像与 Laravel

mysql - joomla 数据库没有响应

php - 解析器错误 : Start tag expected, '<' 未找到

来自 MySQL 的 PHP 组合框

Python:mysql 与 MySQLdb 的优缺点?

java - 使用 Oracle 表分区的 JPA 或 Hibernates?

mysql - 更新 MySQL 表中的连接组件

sql - ORA-01427 : single-row subquery returns more than one row in Update Statement