Mysql innodb行锁不';行不通

Mysql innodb行锁不';行不通,mysql,locking,innodb,rows,Mysql,Locking,Innodb,Rows,Iam使用mysql v5.6 当我使用php发送以下mysql查询时,将选择一些行并锁定它们: SELECT * FROM accounts WHERE id = 1 FOR UPDATE; 我收到以下错误消息: #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

Iam使用mysql v5.6

当我使用php发送以下mysql查询时,将选择一些行并锁定它们:

SELECT * FROM accounts WHERE id = 1 FOR UPDATE;
我收到以下错误消息:

#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, 25' at line 2 

感谢

InnoDB实现了标准的
行级锁定
,其中有两种类型的锁,
共享锁
独占锁

共享锁允许事务读取行。
独占(X)锁允许事务更新或删除行。

使用
SELECT for update
锁定更新行仅在禁用
autocommit
时适用(通过
START transaction
开始事务,或通过将
autocommit
设置为
0
。如果启用了autocommit,则与规范匹配的行不会被锁定。

请参阅链接


Mysql innodb行锁不起作用

现在,我认为它的问题是,您不应该使用只会造成很大不同的
事务未启动
,因此,您必须像我的代码一样
启动事务
,并且

有时,在运行的
事务中,两个相同的语句会得到不同的值,因为其他事务修改了表的行

喜欢您的以下内容:

transaction1> START TRANSACTION;
transaction1> SELECT * FROM accounts WHERE id=1 FOR UPDATE;
transaction1> SELECT first_name, last_name FROM customer WHERE id = 3 FOR UPDATE;

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| JMAIL      | KRISH     |
+------------+-----------+

1 row in set (0.00 sec)
例如:

transaction1> START TRANSACTION;
transaction1> SELECT * FROM accounts WHERE id=1 FOR UPDATE;
transaction1> SELECT first_name, last_name FROM customer WHERE id = 3 FOR UPDATE;

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| JMAIL      | KRISH     |
+------------+-----------+

1 row in set (0.00 sec)
您应该参考此链接:


错误消息是关于限制中的错误,您在显示的查询中没有限制,因此请显示原始查询