Mysql innodb行锁不';行不通
Iam使用mysql v5.6 当我使用php发送以下mysql查询时,将选择一些行并锁定它们: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
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)
您应该参考此链接:
错误消息是关于限制中的错误,您在显示的查询中没有限制,因此请显示原始查询