7.24 LOCK TABLES/UNLOCK TABLES 구문 MySQL은 트랜잭션 환경을 지원하지 않습니다. 믿습니다!!!
LOCK TABLES tbl_name [AS alias] {READ | [LOW_PRIORITY] WRITE}
[, tbl_name {READ | [LOW_PRIORITY] WRITE} ...]
...
UNLOCK TABLES
LOCK TABLES
는 현재 스레드 잠금표입니다.UNLOCK TABLES
현재 라인에 있는 모든 자물쇠를 방출합니다.라인이 다른 LOCK TABLES
를 보낼 때나 서버의 연결이 닫힐 때 현재 라인이 잠긴 모든 테이블이 자동으로 해제됩니다.만약 한 라인이 한 테이블의 자물쇠
READ
를 얻게 된다면, 이 라인 (모든 다른 라인) 은 테이블에서만 읽을 수 있습니다.만약 한 라인이 시계의 WRITE
자물쇠를 얻게 된다면, 자물쇠를 가진 라인READ
이나 WRITE
표만 있고 다른 라인은 막힌다.모든 스레드가 요청한 모든 자물쇠를 얻을 때까지 기다립니다.
WRITE
자물쇠는 일반적으로 READ
자물쇠보다 우선순위가 높아서 변경 사항이 빨리 처리될 수 있도록 합니다.이것은 한 라인이 READ
자물쇠를 얻고 다른 라인이 WRITE
자물쇠를 요청하면 그 다음READ
자물쇠 요청은 WRITE
라인이 자물쇠를 얻고 풀릴 때까지 기다린다는 것을 의미한다.라인이 WRITE
자물쇠를 기다리고 있을 때 LOW_PRIORITY WRITE
를 사용하면 다른 라인이 READ
자물쇠를 얻을 수 있습니다.만약 당신이 마침내 라인이 없으면 READ
자물쇠가 있을 것이라고 확신한다면, 당신은 LOW_PRIORITY WRITE
만 사용해야 합니다.LOCK TABLES
를 사용할 때, 사용할 모든 시계를 잠가야 합니다.만약 당신이 검색에서 시계를 여러 번 사용하고 있다면, 모든 별명에 대해 자물쇠를 가져야 합니다.이 정책 보증표는 잠겨 있지 않을 것이다.사용 중인
INSERT DELAYED
시계를 잠그지 마십시오. 이 경우 INSERT
다른 라인이 실행되기 때문입니다.보통, 모든 단일
UPDATE
문장이 원어이기 때문에 표를 잠글 필요가 없다.SQL 문을 실행하는 다른 스레드를 방해하는 다른 스레드는 없습니다.시계를 잠그고 싶으면 다음과 같은 상황이 있다.READ
잠긴 시계를 업데이트할 수 없고, 다른 라인이 WRITE
잠긴 시계를 읽을 수 없다는 단점이 있다.SELECT
와 UPDATE
사이에 다른 라인이 오지 않도록 하려면 LOCK TABLES
를 사용해야 합니다.다음 예제에서는 안전하게 실행할 수 있도록 LOCK TABLES
해야 합니다mysql> LOCK TABLES trans READ, customer WRITE;
mysql> select sum(value) from trans where customer_id= some_id;
mysql> update customer set total_value=sum_from_previous_statement
where customer_id=some_id;
mysql> UNLOCK TABLES;
없음
LOCK TABLES
, 다른 라인은 실행 SELECT
과 UPDATE
문장 사이를 trans
표에 새 줄을 삽입할 수 있습니다.점증변경(
UPDATE customer SET value=value+new_value
이나 LAST_INSERT_ID()
함수를 사용하면 많은 경우LOCK TABLES
를 피할 수 있습니다.사용자급 잠금 함수
GET_LOCK()
와 RELEASE_LOCK()
를 사용하여 일부 상황을 해결할 수 있습니다. 이 잠금은 서버의 해시표에 저장되어 있고 pthread_mutex_lock()
와pthread_mutex_unlock()
로 높은 속도를 얻을 수 있습니다.7.4.12 기타 함수 참조.잠금 정책에 대한 자세한 내용은 10.2.8 MySQL에서 테이블을 잠그는 방법을 참조하십시오.
MySQL의 모든 잠금은 잠기지 않습니다.이것은 항상 하나의 조회 전에 필요한 모든 잠금을 즉시 요청하고 항상 같은 순서로 표를 잠그는 것을 통해 관리한다.
MySQL은
WRITE
에 다음과 같은 잠금 방법을 사용합니다.MySQL은
READ
에 다음과 같은 잠금 방법을 사용합니다.잠금이 풀렸을 때, 잠금은 잠금 대기열의 라인을 쓰고, 그 다음에 잠금 대기열의 라인을 읽을 수 있습니다.
이것은 테이블에 많은 변경 사항이 있으면
SELECT
문장이 더 이상 변경되지 않을 때까지 기다린다는 것을 의미한다.한 테이블에서 많은
INSERT
와 SELECT
조작을 하는 상황을 해결하기 위해 임시 테이블에 줄을 삽입하고 가끔 임시 테이블에서 온 기록으로 실제 테이블을 업데이트할 수 있다.다음과 같은 코드를 사용할 수 있습니다.
mysql> LOCK TABLES real_table WRITE, insert_table WRITE;
mysql> insert into real_table select * from insert_table;
mysql> delete from insert_table;
mysql> UNLOCK TABLES;
만약 특정한 상황에서 검색의 우선순위를 구분한다면,
LOW_PRIORITY
옵션의 INSERT
을 사용할 수 있습니다.7.14 INSERT
문법 참조."mysys/thr lock.c"의 잠금 코드를 바꾸어서 하나의 대기열을 사용할 수 있습니다.이 경우 쓰기 잠금과 읽기 잠금은 같은 우선 순위가 있어 일부 프로그램에 도움이 될 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.