MySQL - 테이블 'my_table'이 테이블 잠금으로 잠기지 않았습니다.
MySQL을 통해 테이블을 로드하려고 하면 다음 오류가 발생합니까?
MySQL은 다음과 같이 말했습니다.테이블 'cms'가 LOCK TABLES로 잠기지 않았습니다.
테이블을 잠글 필요가 있는 이유는 무엇입니까?나 이거 본 적 없어?잠금을 해제할 방법은 없나요?그러고 싶긴 해?
한 세션에서 한 테이블을 잠그고 다른 테이블에서 선택하려면 해당 테이블도 잠그거나 모든 테이블의 잠금을 해제해야 합니다.
mysql> LOCK TABLES t1 READ;
mysql> SELECT COUNT(*) FROM t1;
+----------+
| COUNT(*) |
+----------+
| 3 |
+----------+
mysql> SELECT COUNT(*) FROM t2;
ERROR 1100 (HY000): Table 't2' was not locked with LOCK TABLES
제 해결책은 책상의 잠금을 해제하는 것이었습니다.이전 쿼리에 의해 잠겨 있었습니다.이 쿼리는 에 도달하기 전에 실패했습니다.unlock tables
진술.
UNLOCK TABLES
SELECT ...
http://dev.mysql.com/doc/refman/5.7/en/lock-tables.html
MySQL을 사용하면 클라이언트세션은 테이블에 액세스하기 위해 다른 세션과 연계할 목적으로 테이블 잠금을 명시적으로 취득할 수 있습니다.또한 세션에 대한 배타적 액세스가 필요한 기간 동안 다른 세션이 테이블을 변경하지 않도록 할 수 있습니다.세션은 자기 자신에 대해서만 잠금을 취득하거나 해제할 수 있습니다.어떤 세션은 다른 세션의 잠금을 취득할 수 없거나 다른 세션이 보유한 릴리스 잠금을 취득할 수 없습니다.
잠금을 사용하여 트랜잭션을 에뮬레이트하거나 테이블을 업데이트할 때 속도를 높일 수 있습니다.이것에 대해서는, 이 섹션의 후반부에서 자세하게 설명합니다.
LOCK TABLES는 현재 클라이언트세션의 테이블 잠금을 명시적으로 취득합니다.기본 테이블 또는 뷰에 대해 테이블 잠금을 가져올 수 있습니다.잠글 각 개체에 대한 LOCK TABLES 권한과 SELECT 권한이 있어야 합니다.
뷰 잠금을 위해 LOCK TABLES는 뷰에서 사용되는 모든 기본 테이블을 잠글 테이블 세트에 추가하고 자동으로 잠급니다.LOCK TABLES를 사용하여 테이블을 명시적으로 잠글 경우, 섹션 13.3.5.2 "LOCK TABLES 및 트리거"에 설명된 대로 트리거에 사용되는 테이블도 암묵적으로 잠깁니다.
UNLOCK TABLES는 현재 세션에서 보유하고 있는 모든 테이블 잠금을 명시적으로 해제합니다.LOCK TABLES는 새 잠금을 획득하기 전에 현재 세션에서 보유하고 있는 테이블 잠금을 암묵적으로 해제합니다.
UNLOCH TABLES의 또 다른 용도는 FLUSH TABLES WITH READ LOCK 문으로 획득한 글로벌 읽기 잠금을 해제하는 것입니다.이것에 의해, 모든 데이타베이스내의 모든 테이블을 잠글 수 있습니다.섹션 13.7.6.3 "FLUSH 구문"을 참조하십시오.(Veritas와 같이 스냅샷을 제때 생성할 수 있는 파일 시스템이 있는 경우 이 방법은 백업을 수행하는 데 매우 편리합니다.)
LOCK 및 UNLOCK 구문
LOCK TABLES
tbl_name [[AS] alias] lock_type
[, tbl_name [[AS] alias] lock_type] ...
lock_type:
READ [LOCAL]
| [LOW_PRIORITY] WRITE
예:-
LOCK TABLE t WRITE, t AS t1 READ;
테이블 잠금 해제
UNLOCK TABLES
MySQL 문서에서 "Table 'my_table' was not lock with LOCK TABLES" 메시지와 관련된 가장 중요한 행 중 하나는 다음과 같습니다.
"이렇게 얻은 잠금이 유지되는 동안 세션은 잠긴 테이블에만 액세스할 수 있습니다." https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html
즉, LOCK이 설치되어 있는 동안 데이터베이스 내의 다른 테이블에 액세스하려고 하면 "Table 'my_table' was not lock with LOCK TABLES" (테이블 'my_table'은 LOCK TABLES'로 잠기지 않았습니다)라는 오류 메시지가 나타납니다.
이와 같이 잠금 중에 액세스할 수 있는 모든 테이블에 잠금을 적용하는 방법이 있습니다."테이블 잠금_1 쓰기, 테이블_2 쓰기"
여기서 table_1은 잠그지만 동일한 프로세스 중에 table_2에 액세스해야 합니다.
table_1만 잠그고 있었는데 'table_2' 테이블이 LOCK TABLES로 잠겨 있지 않다는 오류 메시지가 표시되었기 때문에 혼란스러웠습니다.
왜 2번 테이블이 연관됐는지 알아내는데 시간이 좀 걸렸어요저는 이것이 같은 문제에 대해 다른 사람에게 도움이 되기를 바랍니다.
내 경우엔 가명이 문제였다.
문서에서:
문장이 에일리어스를 사용하여 테이블을 참조하는 경우 동일한 에일리어스를 사용하여 테이블을 잠가야 합니다.에일리어스를 지정하지 않으면 테이블을 잠글 수 없습니다.
반대로 에일리어스를 사용하여 테이블을 잠글 경우 해당 에일리어스를 사용하는 문장에서 참조해야 합니다.
틀렸다:
LOCK TABLE my_table READ;
SELECT * FROM my_table t;
#ERROR 1100: Table 't' was not locked with LOCK TABLES
정답:
LOCK TABLE my_table t READ;
SELECT * FROM my_table t;
이 문제가 발생했습니다.
LOCK TABLE <table_a> READ;
LOCK TABLE <table_b> READ;
LOCK TABLE <table_a> WRITE;
LOCK TABLE <table_b> WRITE;
에서, '아주 좋다', '아주 좋다'가 나옵니다.Table 'table_a' was not locked with Lock Tables
.
설명서를 읽은 후 잠금 코드를 다음과 같이 수정합니다.
LOCK TABLE <table_a> WRITE, <table_b> WRITE
이것으로 나는 문제를 해결했다.
읽기 잠금, 쓰기 금지
WRITE 배타적 쓰기 잠금.다른 연결은 이 테이블을 읽거나 쓸 수 없습니다.
이 오류는 Windows에서 Linux로 데이터를 Import하려고 할 때 발생했습니다.Windows는 대소문자를 구분하지 않고 모두 소문자 테이블명이지만 Linux는 대소문자를 구분합니다.송신원테이블명의 대소문자를 행선지 테이블명과 일치하도록 변경하면, 이 에러는 발생하지 않게 됩니다.다음 SO 포스트에서는 mysql과 관련하여 Windows와 Linux 간의 대소문자를 구분하는 문제에 대해 설명합니다.MySQL의 테이블 이름은 대소문자를 구분합니까?
스토어드 프로시저에 분기된 프로세스가 있었습니다.이것이 에러의 원인이 되고 있었다.
#ERROR 1100: Table 'cached_sales_data' was not locked with LOCK TABLES
다음 SQL 문에 대해 설명합니다.
LOCK TABLES cached_sales_data WRITE, v_sales_data_2 READ;
call refresh_sales_data_now ();
UNLOCK TABLES;
실제로는 refresh_sales_data_now() 스토어드 프로시저의 where 구 서브쿼리에 의해 발생하였습니다.
...
where
orderdatetime > (select max(orderdatetime)
from
cached_sales_data)
문서에 따르면 첫 번째 잠금 중에 에일리어스를 사용하여 두 번째 READ 잠금을 생성하여 세컨더리 선택에 대해 에일리어스를 쓰고 사용할 수 있습니다.
LOCK TABLES cached_sales_data WRITE, cached_sales_data는 csd READ, v_sales_data_2 READ,
...
where
orderdatetime > (select max(orderdatetime)
from
csd)
언급URL : https://stackoverflow.com/questions/36467298/mysql-table-my-table-was-not-locked-with-lock-tables
'source' 카테고리의 다른 글
Java의 가상 머신 및 CLR (0) | 2022.11.23 |
---|---|
Java EE 6에서 Java 웹 응용 프로그램을 만들려면 무엇을 배워야 합니까? (0) | 2022.11.23 |
개체 또는 클래스 이름 가져오기 (0) | 2022.11.14 |
라라벨에서 속도 제한 장치를 해제하시겠습니까? (0) | 2022.11.14 |
ERROR 1130 (HY000):호스트 "는 이 MySQL 서버에 연결할 수 없습니다. (0) | 2022.11.14 |