0

一个新项目迫使我在处理更新时锁定一个表。我遵循了我能找到的每一个建议和指南,包括如何在 phphttp://dev.mysql.com/doc/refman/5.1/en/innodb-locking-reads.html中锁定 mysql 表,但我总是得到同样的错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“LIMIT 0, 30”附近使用正确的语法

为了在我的 live 表中避开任何可能的恶魔,我在 INNODB 引擎上创建了一个新表进行测试,添加了唯一索引,插入了几行,并使用以下语法进行查询:

SELECT svalue FROM `test` WHERE skey='key2' for update;

这会产生相同的错误。删除更新;from the query 允许查询无错误地运行。

我不确定我做错了什么,并尝试了我能想到的一切。请帮助我了解我所缺少的!

谢谢

4

2 回答 2

0

大多数时候,当您使用事务(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");
}
于 2013-06-16T12:09:10.657 回答
0

在事务之外锁定几乎没有意义。这可能解释了语法错误。

顺便说一句,如果您只是想增加列的值(您的评论),只需直接更新它:

update tbl set col = col + 1 where ...
于 2013-06-16T13:24:58.873 回答