programing

여러 테이블에서 LOCK TABLES

yoursource 2022. 11. 21. 23:03
반응형

여러 테이블에서 LOCK TABLES

다음과 같은 경우에 테이블이 잠기지 않았다는 오류가 발생하는 이유를 이해하려고 합니다.(WRITE) LOCK바로 전에 발행되었습니다.

설정은 다음과 같습니다(MySQL/MariaDB).

CREATE TABLE A
(
    id INT
);

CREATE TABLE B
(
    id INT
);

다음은 예를 제시하겠습니다(첫 번째 케이스는 실패한 케이스입니다).

# does not work --> Error: "Table 'B' was not locked with LOCK TABLES" on 2nd statement
LOCK TABLES A WRITE, B WRITE;
INSERT INTO A (id) VALUES ((SELECT 1 FROM B)), ((SELECT 2 FROM B));
UNLOCK TABLES;

# works (single statements)
LOCK TABLES A WRITE, B WRITE;
INSERT INTO A (id) VALUES ((SELECT 1 FROM B));
INSERT INTO A (id) VALUES ((SELECT 2 FROM B));
UNLOCK TABLES;

# works (table aliases)
LOCK TABLES A WRITE, B tb1 WRITE, B tb2 WRITE;
INSERT INTO A (id) VALUES ((SELECT 1 FROM B tb1)), ((SELECT 2 FROM B tb2));
UNLOCK TABLES;

첫 번째 경우 오류의 원인은 무엇입니까?


편집: 예제를 최소한으로 다시 단순화했습니다.

언급URL : https://stackoverflow.com/questions/62695446/lock-tables-does-not-work-as-expected-with-multiple-tables

반응형