2013-02-08 3 views
9

MySQL 테이블 잠금에 대한 약간의 호기심이 있습니다.MySQL 다중 테이블 잠금

두 테이블을 고정하고 싶습니다. 나는 두 가지를 실행하면 잠금 예를 들어 sequentitally 명령 있음 그래도

SHOW OPEN TABLES IN mydatabase WHERE In_use > 0 

내가 발견했습니다 : :이 명령을 실행 :

LOCK TABLES table1 WRITE, table2 WRITE 

을 그리고 테이블이 실제로 실행하여 고정 된 경우 그때 확인

LOCK TABLES table1 WRITE 
LOCK TABLES table2 WRITE 

그런 다음 동일한 명령을 사용하여 잠겨있는 테이블을 확인하십시오. table2는 잠긴 것으로 표시되어 있습니다. 이게 왜 그렇게?

감사

답변

7

LOCK TABLES 트랜잭션 안전하지 않고 암시 적으로 테이블을 고정하기 전에 모든 활성 트랜잭션을 커밋합니다. LOCK TABLES table1 WRITE 처음 실행하기 전에 현재 세션에 의해 잠겨 모든 테이블의 잠금을 해제합니다

0

잠금 테이블을 최선을 다하고 있었다 때문에

그래서 첫 번째 경우에, 당신은 하나의 두 번째에, 잠이 개 테이블을 보유 하나의 트랜잭션이 지정된 락 따라서 잠금 테이블 2에 대한 호출은 테이블 1의 잠금을 해제합니다.