MySql“For Update”导致错误

MySql“For Update”导致错误,mysql,select,sql-update,Mysql,Select,Sql Update,一个新项目迫使我在处理更新时锁定一个表。我遵循了我能找到的所有建议和指南,包括 ,但我总是得到相同的错误:1064-您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第1行“LIMIT 0,30”附近要使用的正确语法 为了克服live table中可能存在的问题,我在INNODB引擎上创建了一个新表进行测试,添加了唯一索引,插入了几行,并使用以下语法进行查询: SELECT svalue FROM `test` WHERE skey='key2' for update; 这会产

一个新项目迫使我在处理更新时锁定一个表。我遵循了我能找到的所有建议和指南,包括 ,但我总是得到相同的错误:1064-您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第1行“LIMIT 0,30”附近要使用的正确语法

为了克服live table中可能存在的问题,我在INNODB引擎上创建了一个新表进行测试,添加了唯一索引,插入了几行,并使用以下语法进行查询:

SELECT svalue FROM `test` WHERE skey='key2' for update;
这会产生同样的错误。删除要更新的文件;从查询允许查询在没有错误的情况下运行

我不确定我做错了什么,我已经尝试了我能想到的一切。请帮我理解我错过了什么


感谢大部分时间,当您使用InnoDB类型的事务时,MySQL将处理表或行锁定

//Doing transactions
mysql_query("SET AUTOCOMMIT=0");
mysql_query("START TRANSACTION");
$query = "SELECT svalue FROM `test` WHERE skey='key2'";

if($query)
{
  mysql_query("COMMIT");
}else{
  mysql_query("ROLLBACK");
}

在事务之外锁定通常是没有意义的。这可能解释了语法错误

顺便说一句,如果你只是想增加评论栏的价值,直接更新即可:

update tbl set col = col + 1 where ...

我的目标是从表中选择一个现有值,然后递增并更新它,同时确保另一个进程在更新完成之前不会读取旧值。我的大部分研究都指出,对于这个场景的更新,使用事务是否有优势?@foxns7:op锁定行实际上是正确的。并发事务可能会修改它。我遇到的问题是,我需要知道col更新到的新值。我还没有找到像Postgres那样的更新和返回值语句。我试图按照我的问题中列出的dev.mysql.com页面上的代码进行操作,这显示了以下示例:从child_代码中选择counter_字段进行更新;更新子\u代码集计数器\u字段=计数器\u字段+1;我是否需要将其包装在事务中,这是我的问题吗?是的,这可能是问题所在。顺便提一下,如果你对Postgres非常了解,能够意识到更新返回,那么你想回到MySQL有什么特别的原因吗-不幸的是,MySQL不是我在这个项目上的选择。。。我总是对权力心存感激。即使在事务中包装语句,我也会遇到同样的错误。我的服务器是10.4.10-10