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 타입의 테이블을 하나 새로 만드는것을 추천한다.