MySQL phpmyadmin - SELECT FOR UPDATE 无法识别
Posted
技术标签:
【中文标题】MySQL phpmyadmin - SELECT FOR UPDATE 无法识别【英文标题】:MySQL phpmyadmin - SELECT FOR UPDATE not recognised 【发布时间】:2018-03-27 21:41:24 【问题描述】:我正在编写一个 php 程序,并希望实现行级锁定以避免用户同时更新/删除同一条记录。
但我在使用 SELECT FOR UPDATE 时遇到错误“无法识别的关键字”。表类型为 innoDB。
我是否缺少数据库的任何设置?
SELECT * FROM companyTable
WHERE companyId = "0000001"
FOR UPDATE;
错误 静态分析:
在分析过程中发现了 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
【问题讨论】:
什么是FOR
??
SELECT [...] FOR UPDATE 是 Oracle 数据库语法而不是 MySQL 语法。
【参考方案1】:
存在语法错误试试这个:
它选择从 1 到 30 的所有记录
SELECT * FROM companyTable WHERE companyId = "0000001" ORDER BY id LIMIT 30;
【讨论】:
我正在尝试使用 SELECT FOR UPDATE 语句锁定记录/阻止其他用户执行 UPDATE/DELETE 操作。【参考方案2】:第一个问题似乎是,在您的 SQL 查询中缺少关键字 UPDATE
SELECT * FROM companyTable WHERE companyId = "0000001" FOR LIMIT 0, 30
第二个问题可能是,MySQL 中的 SELECT ... FOR UPDATE
语法不支持 LIMIT
。
所以你的 SQL 查询应该是:
SELECT * FROM companyTable WHERE companyId = "0000001" FOR UPDATE
在 phpmyadmin 中,很难删除自动添加的LIMIT
子句 - 尝试另一个 MySQL 客户端。
【讨论】:
【参考方案3】:PhpMyAdmin 不是为处理(测试)事务控制而构建的,请改用 Mysql 控制台或 php 会话
并在代码之前使用“begin”开始事务
begin;
select * from `tblx` where `idx`=1 for update;
update `tblx` set `field`='xx' where `idx`=1;
commit;
【讨论】:
以上是关于MySQL phpmyadmin - SELECT FOR UPDATE 无法识别的主要内容,如果未能解决你的问题,请参考以下文章
在 phpmyadmin 和 SQL Fiddle 上执行时相同 SELECT 查询的不同结果