行锁定(Row Locking)是数据库管理系统(DBMS)中的一种并发控制机制,用于确保多个事务在同时访问同一数据时不会发生冲突。在MySQL中,行锁定可以通过SELECT ... FOR UPDATE
或SELECT ... LOCK IN SHARE MODE
语句实现。
行锁定通常用于以下场景:
以下是一个使用PHP和MySQL实现行锁定的示例:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 开始事务
$conn->begin_transaction();
try {
// 使用行锁定查询并更新数据
$sql = "SELECT amount FROM accounts WHERE id = 1 FOR UPDATE";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$new_amount = $row['amount'] - 100;
$update_sql = "UPDATE accounts SET amount = $new_amount WHERE id = 1";
if ($conn->query($update_sql) === TRUE) {
echo "更新成功";
} else {
throw new Exception("更新失败: " . $conn->error);
}
}
// 提交事务
$conn->commit();
} catch (Exception $e) {
// 回滚事务
$conn->rollback();
echo "事务回滚: " . $e->getMessage();
}
$conn->close();
?>
通过以上方法,可以有效解决行锁定过程中遇到的常见问题。
领取专属 10元无门槛券
手把手带您无忧上云