>  기사  >  데이터 베이스  >  MySQL 구문 분석 테이블 잠금

MySQL 구문 분석 테이블 잠금

WBOY
WBOY앞으로
2022-06-14 12:06:361857검색

이 기사에서는 테이블 잠금에 대한 관련 구문 분석을 주로 소개하는 mysql에 대한 관련 지식을 제공합니다. MySQL을 사용하면 클라이언트 세션이 특정 기간 내에 다른 세션에 액세스하지 못하도록 명시적으로 테이블 잠금을 획득할 수 있습니다. 아래의 동일한 표가 모든 사람에게 도움이 되기를 바랍니다.

MySQL 구문 분석 테이블 잠금

추천 학습: mysql 비디오 튜토리얼

MySQL 테이블 잠금

잠금은 테이블과 관련된 플래그입니다. MySQL을 사용하면 클라이언트 세션이 명시적으로 테이블 잠금을 획득하여 다른 세션이 특정 기간 동안 동일한 테이블에 액세스하는 것을 방지할 수 있습니다. 클라이언트 세션은 자체 테이블 잠금만 획득하거나 해제할 수 있습니다. 다른 세션에 대한 테이블 잠금을 획득하거나 해제할 수 없습니다.

CREATE TABLE tbl (
  id INT NOT NULL AUTO_INCREMENT,
  col INT NOT NULL,
  PRIMARY KEY (id)) Engine = InnoDB;

LOCK 및 UNLOCK TABLES 구문

다음 문은 명시적으로 테이블 잠금을 획득합니다.

LOCK TABLES table_name [READ | WRITE]

테이블을 잠그려면 LOCK TABLES 키워드 뒤에 해당 이름을 지정합니다. 또한 READ 또는 WRITE 등의 잠금 유형을 지정할 수 있습니다.

테이블에 대한 잠금을 해제하려면 다음 명령문을 사용하세요.

UNLOCK TABLES;

Read lock

READ 잠금의 특징은 다음과 같습니다.

  1. READ는 여러 세션을 통해 동시에 테이블에 대한 잠금을 획득할 수 있습니다. 또한 다른 세션은 잠금을 획득하지 않고도 테이블에서 데이터를 읽을 수 있습니다.
  2. READ 잠금을 보유한 세션은 테이블의 데이터를 읽을 수만 있고 쓸 수는 없습니다. 또한 READ가 잠금을 해제할 때까지 다른 세션이 테이블에 데이터를 쓸 수 없습니다. 다른 세션의 쓰기 작업은 READ 잠금이 해제될 때까지 대기 상태로 들어갑니다.
  3. MySQL은 세션이 정상적으로 종료되거나 비정상적으로 종료되면 암시적으로 모든 잠금을 해제합니다. 이 기능은 WRITE 잠금과도 관련이 있습니다.

예:
첫 번째 세션에서 먼저 mysqldemo 데이터베이스에 연결하고 아래와 같이 CONNECTION_ID() 함수를 사용하여 현재 연결 ID를 가져옵니다.

SELECT CONNECTION_ID();

MySQL 구문 분석 테이블 잠금
그런 다음 tbl에 새 연결 ID를 삽입합니다. 테이블 괜찮아.

INSERT INTO tbl(col) VALUES(10);

다음으로 tbl 테이블의 데이터를 쿼리합니다.

SELECT * FROM tbl;

MySQL 구문 분석 테이블 잠금
그런 다음 잠금을 얻으려면 LOCK TABLE 문을 사용하세요.

LOCK TABLE tbl READ;

마지막으로 동일한 세션 내에서 tbl 테이블에 새 행을 삽입하려고 하면 오류 메시지가 표시됩니다.

INSERT INTO tbl(col) VALUES(11);

MySQL 구문 분석 테이블 잠금
따라서 READ가 잠금을 획득하면 동일한 세션의 테이블에 데이터를 쓸 수 없습니다.

다른 세션의 잠금을 확인하세요.
먼저 mysqldemo에 연결하고 연결 ID를 확인합니다:

SELECT CONNECTION_ID();

MySQL 구문 분석 테이블 잠금
그런 다음 tbl 테이블에서 데이터를 검색합니다:

SELECT * FROM tbl;

MySQL 구문 분석 테이블 잠금
다음으로 tbl 테이블에 새 행을 삽입합니다:

INSERT INTO tbl(col) VALUES(20);

MySQL 구문 분석 테이블 잠금
second 첫 번째 세션 READ가 tbl 테이블에 대한 잠금을 획득했지만 아직 해제하지 않았기 때문에 각 세션의 삽입 작업은 대기 상태입니다.

자세한 내용은 SHOW PROCESSLIST에서 확인하실 수 있습니다.

SHOW PROCESSLIST;

MySQL 구문 분석 테이블 잠금
이후 첫 번째 세션으로 돌아가서 UNLOCK TABLES 문을 사용하여 잠금을 해제합니다. READ가 첫 번째 세션에서 잠금을 해제한 후 INSERT는 두 번째 세션에서 작업을 수행합니다.

unlock tables;

마지막으로 tbl 테이블의 데이터를 확인하여 두 번째 세션의 INSERT 작업이 실제로 실행되는지 확인합니다.

SELECT * FROM tbl;

MySQL 구문 분석 테이블 잠금

WRITE LOCK

WRITE 잠금에는 다음과 같은 특징이 있습니다.

  1. 테이블 잠금을 보유하는 유일한 세션은 테이블에서 데이터를 읽고 쓸 수 있습니다.
  2. 다른 세션은 WRITE 잠금이 해제될 때까지 테이블에서 데이터를 읽고 쓸 수 없습니다.

먼저 WRITE는 첫 번째 세션에서 잠금을 가져옵니다.

LOCK TABLE tbl WRITE;

그런 다음 tbl 테이블

INSERT INTO tbl(col) VALUES(11);

에 새 행을 삽입하면 작동합니다.

다음으로 tbl 테이블에서 데이터를 읽습니다.

SELECT * FROM tbl;

MySQL 구문 분석 테이블 잠금

그것도 작동합니다.

이후 두 번째 세션부터 데이터 쓰기 및 읽기를 시도해 보세요.

INSERT INTO tbl(col) VALUES(21);
 SELECT * FROM tbl;

MySQL 구문 분석 테이블 잠금
MySQL 구문 분석 테이블 잠금

最后,从第一个会话中释放锁定。

UNLOCK TABLES;

看到第二个会话中的所有待处理操作都已执行,下图说明了结果:
MySQL 구문 분석 테이블 잠금

读锁与写锁

  1. 读锁是“共享”锁,它可以防止正在获取写锁,但不能锁定其他读锁。
  2. 写锁是“独占”锁,可以防止任何其他类型的锁。

推荐学习:mysql视频教程

위 내용은 MySQL 구문 분석 테이블 잠금의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제