트랜잭션 내부의 SELECT 쿼리 자체는 UPDATE 및 DELETE로부터 제대로 보호되지 않습니다.
다음을 사용해야하는 것 :
발행하면 Delete From orders Where id=1
, orders
테이블 의 행 이 트랜잭션 종료시 잠금을 해제 한 후에 발생 합니다. READ UNCOMMITTED
트랜잭션 격리 수준을 사용하여 삭제를 논리적으로 수행 하는 실험 (개발자 / 준비 서버에서 수행) 을 시도 할 수 있지만 커밋시에만 영구적으로 표시되고 기록됩니다.
두 번째 거래에서는 기본적으로 모든 베팅이 해제됩니다. 당신이 실행하는 경우
select * From orders Where id=1;
UPDATE orders SET username="John" Where id=1;
실행 Delete From orders Where id=1
하면 즉시 커밋됩니다. MySQL이 이러한 명령문을 실행하는 순서에 따라 삭제 행이 표시되거나 표시되지 않습니다.
경고
MySQL 5.6은 이제 다음을 갖습니다 .
START TRANSACTION READ WRITE;
START TRANSACTION READ ONLY;
READ WRITE 및 READ ONLY 한정자는 트랜잭션 액세스 모드를 설정합니다. 트랜잭션에 사용 된 테이블에 대한 변경을 허용하거나 금지합니다. 읽기 전용 제한 사항은 트랜잭션이 다른 트랜잭션에 표시되는 트랜잭션 및 트랜잭션이 아닌 테이블을 수정하거나 잠그지 못하게합니다. 트랜잭션은 여전히 임시 테이블을 수정하거나 잠글 수 있습니다. 이 수정자는 MySQL 5.6.5부터 사용할 수 있습니다.