Блокировка строки Mysql innodb не работает

Я использую mysql v5.6.

Когда я отправляю следующий запрос mysql, используя php, который выберет некоторые строки, а также заблокирует их:

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 

Спасибо


person user205537    schedule 08.04.2014    source источник
comment
Сообщение об ошибке связано с ошибкой в ​​LIMIT, и у вас нет LIMIT в показанном вами запросе, поэтому покажите исходный запрос.   -  person Maxim Krizhanovsky    schedule 28.04.2014


Ответы (2)


Блокировка строки MySQL innodb не работает

Теперь я думаю, что проблема в том, что вы не должны использовать transaction not started, которые только делают большие различия, поэтому вы должны START TRANSACTION нравиться моему коду, и

иногда случалось, что в запущенном transaction два одинаковых оператора получают разные значения, потому что какая-то другая транзакция модифицировала строки таблицы.

Нравится вам следующим образом:

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)

вы должны перейти по этой ссылке:

http://www.mysqlperformanceblog.com/2012/03/27/innodbs-gap-locks/

http://dev.mysql.com/doc/refman/5.1/en/innodb-locks-set.html

https://stackoverflow.com/a/22007412/3242978

person jmail    schedule 08.04.2014

InnoDB реализует стандартный row-level locking, где есть два типа блокировок, shared (S) locks и exclusive (X) locks.

A shared (S) lock permits a transaction to read a row. An exclusive (X) lock permits a transaction to update or delete a row.

Блокировка строк для обновления с использованием SELECT FOR UPDATE применяется только тогда, когда autocommit отключен (либо путем начала транзакции с START TRANSACTION, либо путем установки autocommit на 0. Если включена автоматическая фиксация, строки, соответствующие спецификации, не блокируются.

См. ссылка

https://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

https://dev.mysql.com/doc/refman/5.0/en/innodb-lock-modes.html

person Mayuri    schedule 08.04.2014