안녕하세요. mysql로 프로젝트를 진행하던 중 궁금한 점이 있어서 문의를 남깁니다.
mysql 버전은 8 이며 InnoDB를 사용하고 있습니다.
현재 저는 delete 후 select 한 데이터를 insert 하려고 합니다.
delete -> insert into select 는 하나의 트랜잭션으로 묶어놓았습니다.
delete와 insert는 같은 테이블이며, select는 다른 여러 테이블들에서 데이터 값을 조합합니다.
1. 'REPEATABLE READ', 'SERIALIZABLE' 에서는 ER_LOCK_WAIT_TIMEOUT 이 발생합니다.
2. 'READ COMMITTED' 에서는 딜리트 되기 전의 값이 읽혀 삭제돼서 보이지 않아야 할 값도 insert 됩니다.
3. 'READ UNCOMMITED' 에서는 정상적으로 작동이 되나, 다른 트랜잭션의 커밋되지 않은 값도 읽히게 되어 위험하다고 판단이 됩니다.
락은 인서트 부분에서 발생하고 있습니다.
AFTER DELETE , AFTER INSERT 트리거를 생성하였을 경우엔 정상적으로 작동했습니다.
같은 트랜잭션 내의 커밋되지 않은 값만 읽어들이는 방법이 있을지 궁금합니다.
아니면 아예 트랜잭션을 풀고 작업을 진행해야 할까요?