본문 바로가기
SQL/Muzi

[SQL] MySQL 테이블 락 안걸릴 경우

by 미눅스[멘토] 2024. 8. 27.
728x90

 

테이블 락을 걸경우에 보통 아래형식으로 테이블 락을 걸어준다

START TRANSACTION;
SELECT column FROM your_table_name WHERE id = #column# FOR UPDATE;

하지만 락이 안걸릴 경우가 있는데 그 이유는 TABLE에 ENGINE 타입이 아니라서 그럴 수 있다.

그럼 아래 쿼리문을 돌려보면 테이블별 ENGINE 타입이 나온다.

SELECT TABLE_NAME, ENGINE
FROM   information_schema.TABLES
WHERE  TABLE_SCHEMA = 'db이름';

확인을 하고 타입이 innoDB타입이 아니면

아래처럼 락테이블을 새로 하나 만들어서 그 테이블을 락 테이블로 사용하거나

CREATE TABLE table_lock (
    id VARCHAR(100) NOT NULL
) ENGINE=InnoDB;

INSERT INTO table_lock (id) VALUES ('lock');

START TRANSACTION;
SELECT id FROM your_table_name WHERE id = 'lock' FOR UPDATE;

 

아래 쿼리문을 사용해 ENGINE 타입을 = InnoDB 로 바꿔주고 사용한다.

단!! 아래 쿼리는 수정하는데 이유는 모르겠지만 시간이 오래걸림 아주오래....

ALTER TABLE comtnmtgplacemanage ENGINE=InnoDB;

 

 

헤헤

'SQL > Muzi' 카테고리의 다른 글

더미데이터 만들기  (0) 2024.04.02
SQL 삭제된 데이터 복구 및 되돌리기(오라클 플레시백)Flashback  (0) 2023.10.06
최프 SQL 쿼리문  (0) 2023.09.27
sql 연습  (0) 2023.08.04
참조무결성(DB삭제시 자식테이블 삭제)  (0) 2023.08.02