SQL/Muzi

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

미눅스[멘토] 2024. 8. 27. 18:09
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;

 

 

그래서 추천하는게 새로운 NGINE=InnoDB 타입의 테이블을 하나 새로 만드는것을 추천한다.