【问题标题】:Error when trying to use SELECT...FOR UPDATE in MySql尝试在 MySql 中使用 SELECT...FOR UPDATE 时出错
【发布时间】:2020-09-15 19:42:33
【问题描述】:

我一直在尝试执行这一行命令:

START TRANSACTION; SELECT * FROM users where uid = 1 FOR UPDATE

在 phpMyAdmin 中。当我这样做时会引发错误:

SQL 查询:

SELECT * FROM users where uid = 1 FOR UPDATE LIMIT 0, 25

MySQL 说:

您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在第 1 行的“LIMIT 0, 25”附近使用的正确语法

我要做的是在执行更新查询时实现独占记录锁定。

【问题讨论】:

    标签: mysql sql database phpmyadmin


    【解决方案1】:

    根据https://dev.mysql.com/doc/refman/8.0/en/select.html,LIMIT 需要在 FOR UPDATE 之前。因此,将您的查询更改为以下内容应该可以解决此错误:

    START TRANSACTION; SELECT * FROM users WHERE uid = 1 LIMIT 0, 25 FOR UPDATE;
    

    【讨论】:

    • 工作正常。但现在我也想更新。我正在使用这个命令:“START TRANSACTION; SELECT * FROM users WHERE uid = 1 LIMIT 0, 25 FOR UPDATE; UPDATE users SET name = "Marcose" WHERE uid = 1 COMMIT;"但这不起作用。它会抛出此错误“-您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,以了解在第 1 行的 'COMMIT' 附近使用的正确语法”
    • 再一次,update (dev.mysql.com/doc/refman/8.0/en/commit.html) 的文档有你可以查看的工作示例。我打赌你需要;COMMIT; 之前关闭UPDATE
    • 该查询没有出现任何错误。但它没有给我想要的输出。如果我执行查询“SELECT * FROM users WHERE uid = 1 LIMIT 0, 25 FOR UPDATE;”然后我尝试在此之后更新,它会立即更新并且不会给出任何锁定记录的歌声。这可能是什么原因?
    • 我不确定。您需要提供有关该问题的更多详细信息,但请针对此问题进行一些研究和/或在网站上发布另一个问题。 Comments aren't for extended discussion; especially on an answered question..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2019-06-13
    • 2012-06-11
    • 2014-03-10
    • 1970-01-01
    • 2014-11-29
    • 2011-05-17
    相关资源
    最近更新 更多