2015-01-09 2 views
2

У меня возникли проблемы с блокировкой таблицы. Я заблокировал определенное количество таблиц в транзакции. LOCK TABLES t1 READ, t2 READ, t3 READ, t4 READ,t5 READ,t6 READ,t7 READ;Mysql - Ошибка блокировки таблицы

При чтении его хорошо, но когда я пытаюсь написать/обновление для этого таблиц он показывает об ошибке таблицы «t1» был заперт с замком READ и не может быть обновлен

Но я никогда не запирал таблицу для записи, мне приходится писать в эти таблицы с обновленными значениями.

Моя цель: мне нужно выбрать, и мне нужно обновить строки, в то время как другие не должны взаимодействовать с вышеуказанными таблицами, пока процесс не завершится.

Большое спасибо за ваши решения!

+1

RTFM: http://dev.mysql.com/doc/refman/5.0/en /lock-tables.html 'Сессия, которая содержит блокировку, может читать таблицу (но не записывать ее) .' –

ответ

2

От mysql doc:

Правило для блокировки Приобретения Для приобретения табличных блокировок в текущем сеансе, используйте оператор LOCK TABLES. Следующие блокировки типов:

READ [LOCAL] блокировка:

Сеанс, который удерживает блокировку, может прочитать таблицу (но не писать его).

0
MariaDB [test]> lock table super1 read; 
Query OK, 0 rows affected (0.00 sec) 


MariaDB [test]> select * from super1; 
+----+ 
| id | 
+----+ 
| 1 | 
| 2 | 
| 3 | 
| 5 | 
| 6 | 
| 7 | 
+----+ 
6 rows in set (0.00 sec) 

MariaDB [test]> insert into super1 VALUE(10); 
ERROR 1099 (HY000): Table 'super1' was locked with a READ lock and can't be updted 

другой сеанс может ВЫБРАТЬ слишком

MariaDB [test]> unlock tables; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [test]> lock table super1 write; 
Query OK, 0 rows affected (0.00 sec) 

другой сеанс может не ВЫБРАТЬ

MariaDB [test]> insert into super1 VALUE(10); 
Query OK, 1 row affected (0.00 sec) 

MariaDB [test]> insert into super1 VALUE(11); 
Query OK, 1 row affected (0.00 sec) 

MariaDB [test]> unlock tables; 
Query OK, 0 rows affected (0.00 sec) 
Смежные вопросы