2015-01-09 5 views
2

테이블 잠금에 문제가 있습니다. 거래에서 특정 수의 테이블을 잠갔습니다. LOCK TABLES t1 READ, t2 READ, t3 READ, t4 READ,t5 READ,t6 READ,t7 READ;Mysql - 테이블 잠금 오류

의 확인을 읽는 동안,하지만 작성하려고 할 때 /이 테이블에 대한 업데이트는 오류 테이블 'T1'을 보여주는 것은 READ 잠금 장치로 잠겨 및

하지만를 업데이트 할 수 없습니다 쓰기 위해 테이블을 잠그지 않았으므로이 테이블에 업데이트 된 값을 써야합니다.

내 목표는 선택해야하며 행을 업데이트해야하지만 다른 프로세스는 프로세스가 완료 될 때까지 위의 테이블과 상호 작용하지 않아야합니다.

많은 점에 감사드립니다. mysql doc에서

+1

RTFM을 선택할 수 없습니다 선택할 수 있습니다 /lock-tables.html'잠금을 유지하고있는 세션은 테이블을 읽을 수 있지만 쓰지는 않습니다. ' –

답변

2

: 현재 세션 내에서 테이블 잠금을 획득하기 위해 잠금 획득 에 대한

규칙은 LOCK 테이블 문을 사용합니다. 다음 잠금 유형을 사용할 수 있습니다

READ [LOCAL] 잠금 :

테이블을 읽고 (그러나 그것을 쓸) 수있는 잠금을 보유 세션. http://dev.mysql.com/doc/refman/5.0/en :

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)