Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 오류 1099(HY000) 해결 방법: READ 잠금으로 잠긴 테이블을 업데이트할 수 없을 때

MySQL에서 LOCK TABLES 명령으로 테이블에 READ 잠금을 설정한 상태에서는 해당 테이블에 데이터를 삽입하거나 수정할 수 없습니다. 이때 발생하는 것이 바로 오류 1099(HY000)입니다.

이 오류를 해결하는 방법은 간단합니다. UNLOCK TABLES 명령을 실행하여 잠금을 해제하면 됩니다. 아래 예제를 통해 전체 과정을 단계별로 살펴보겠습니다.

1. 테스트용 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table demo6
-> (
-> country_name varchar(100)
-> );
Query OK, 0 rows affected (1.51 sec)

2. 데이터 삽입 및 조회하기

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into demo6 values('US');
Query OK, 1 row affected (0.11 sec)

mysql> insert into demo6 values('UK');
Query OK, 1 row affected (0.08 sec)

mysql> insert into demo6 values('AUS');
Query OK, 1 row affected (0.11 sec)

SELECT 문으로 저장된 데이터를 확인합니다.

mysql> select *from demo6;

실행 결과는 다음과 같습니다.

+--------------+
| country_name |
+--------------+
| US           |
| UK           |
| AUS          |
+--------------+
3 rows in set (0.00 sec)

3. READ 잠금 설정 후 오류 확인하기

이제 위 테이블에 읽기(READ) 전용 잠금을 설정해 보겠습니다.

mysql> lock tables demo6 read;
Query OK, 0 rows affected (0.00 sec)

READ 잠금이 걸린 상태에서 INSERT를 시도하면 다음과 같은 오류가 발생합니다.

mysql> insert into demo6 values('IND');
ERROR 1099 (HY000): Table 'demo6' was locked with a READ lock and can't be updated

READ 잠금은 말 그대로 읽기 작업만 허용하기 때문에, 쓰기 작업은 모두 차단됩니다. 이것이 오류 1099의 원인입니다.

4. UNLOCK TABLES로 잠금 해제하기

잠금을 해제하려면 다음 명령을 실행합니다.

mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

5. 잠금 해제 후 데이터 삽입하기

잠금이 해제되면 동일한 테이블에 정상적으로 레코드를 삽입할 수 있습니다.

mysql> insert into demo6 values('IND');
Query OK, 1 row affected (0.09 sec)

다시 SELECT 문으로 데이터를 조회해 보겠습니다.

mysql> select *from demo6;

'IND' 레코드가 정상적으로 추가된 것을 확인할 수 있습니다.

+--------------+
| country_name |
+--------------+
| US           |
| UK           |
| AUS          |
| IND          |
+--------------+
4 rows in set (0.00 sec)

정리

MySQL 오류 1099(HY000)는 테이블이 READ 잠금 상태일 때 쓰기 작업을 시도하면 발생합니다. 핵심 해결 방법은 다음과 같습니다.

  • UNLOCK TABLES 명령으로 현재 세션의 모든 잠금을 해제한다.
  • 잠금 해제 후에는 INSERT, UPDATE, DELETE 등의 쓰기 작업이 정상적으로 수행된다.

참고로 LOCK TABLES ... WRITE를 사용하면 쓰기 작업도 가능하지만, 다른 세션의 읽기까지 차단되므로 상황에 맞게 적절한 잠금 유형을 선택하는 것이 중요합니다.