Jon*_*han 2 mysql innodb locking laravel laravel-3
我试图使用Laravel 3执行SELECT ... FOR UPDATE查询:
SELECT * from projects where id = 1 FOR UPDATE;
UPDATE projects SET money = money + 10 where id = 1;
Run Code Online (Sandbox Code Playgroud)
我现在已经尝试了好几个小时:
DB::connection()->pdo->exec($query);
Run Code Online (Sandbox Code Playgroud)
和
DB::query($query)
Run Code Online (Sandbox Code Playgroud)
我也尝试添加START TRANSACTION; ... COMMIT;到查询,我试图分开SELECT从UPDATE在这样两个不同的部分:
DB::query($select);
DB::query($update);
Run Code Online (Sandbox Code Playgroud)
有时我会受到0行的影响,有时我会收到类似这样的错误:
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
SQL: UPDATE `sessions` SET `last_activity` = ?, `data` = ? WHERE `id` = ?
Run Code Online (Sandbox Code Playgroud)
我想使用Laravel的数据库连接锁定行以更新敏感数据.
谢谢.
在所有的情况下,你需要做的是增加money的10,你不需要更新之前锁定该行.只需执行更新查询即可完成工作.该SELECT查询只会拖慢你的脚本,在这种情况下,并不能帮助.
UPDATE projects SET money = money + 10 where id = 1;
Run Code Online (Sandbox Code Playgroud)