0

我正在编写一个 PHP 程序,并希望实现行级锁定以避免并发用户更新/删除同一记录。

但是我在使用 SELECT FOR UPDATE 时遇到错误“无法识别的关键字”。表类型是 innoDB。

我错过了我的数据库的任何设置吗?

我的 SQL 语句

SELECT * FROM companyTable
WHERE companyId = "0000001"
FOR UPDATE;

SQL 错误

错误
静态分析:

分析时发现1个错误。

无法识别的关键字。(靠近位置 57 的“FOR”)
SQL 查询:文档

SELECT * FROM companyTable WHERE companyId = "0000001" FOR LIMIT 0, 30

MySQL 说:文档

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 30' at line 3
4

3 回答 3

0

PhpMyAdmin 不是为处理(测试)事务控制而构建的,而是使用 Mysql 控制台或 php 会话

并在代码之前使用“开始”启动事务

begin;

select * from `tblx` where `idx`=1 for update;

update `tblx` set `field`='xx' where `idx`=1;

commit;
于 2020-01-02T06:32:27.613 回答
0

第一个问题似乎是,在您的 SQL 查询中缺少关键字UPDATE

SELECT * FROM companyTable WHERE companyId = "0000001" FOR LIMIT 0, 30

第二个问题可能是,SELECT ... FOR UPDATEMySQL 中的语法不支持 LIMIT.

所以你的 SQL 查询应该是:

SELECT * FROM companyTable WHERE companyId = "0000001" FOR UPDATE

在 phpmyadmin 中,很难删除自动添加的LIMIT子句 - 尝试另一个 MySQL 客户端。

于 2018-06-29T12:48:38.430 回答
0

有一个语法错误试试这个:

它选择从 1 到 30 的所有记录

SELECT * FROM companyTable WHERE companyId = "0000001" ORDER BY id LIMIT 30;
于 2017-10-16T11:32:08.463 回答