집 >데이터 베이스 >MySQL 튜토리얼 >잠금 없이 MySQL에서 SELECT 문을 실행하는 방법은 무엇입니까?
MySQL에서 잠금을 유발하지 않고 SELECT 문을 실행하는 방법
MySQL에서 SELECT 문을 실행하면 잠금이 발생할 수 있으며, 특히 기본 테이블이 동시수정중입니다. 이는 특히 binlogging에 의존하는 슬레이브 데이터베이스에서 문제가 될 수 있습니다.
제공된 문서에서 제안된 한 가지 잠재적인 해결책은 "NOLOCK" 수정자를 활용하는 것입니다. 그러나 MySQL은 동등한 키워드를 지원하지 않습니다. 대신 트랜잭션 격리 수준을 조정하여 동일한 효과를 얻을 수 있습니다.
해결책: 커밋되지 않은 트랜잭션 격리 수준 읽기
SELECT 문을 실행하는 동안 잠금을 방지하려면 다음을 수행할 수 있습니다. 트랜잭션 격리 수준을 "READ UNCOMMITTED"로 설정합니다. 이를 통해 커밋되지 않은 트랜잭션을 볼 수 있어 잠금이 발생하는 것을 방지할 수 있습니다. 방법은 다음과 같습니다.
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(online.account_id) cnt from online; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
슬레이브 데이터베이스 호환성
슬레이브 데이터베이스에서 READ UNCOMMITTED 격리 수준을 사용할 때 다음 오류가 발생할 수 있습니다. 로깅이 불가능합니다...InnoDB의 트랜잭션 수준 'READ-UNCOMMITTED'는 binlog 모드 'STATEMENT'에 대해 안전하지 않습니다." 이 문제를 해결하려면 마스터 데이터베이스의 my.cnf 파일을 수정하여 binlogging에 대한 "READ UNCOMMITTED" 트랜잭션 격리 수준을 활성화할 수 있습니다.
대체 솔루션
또는, 격리 수준을 설정하는 대신 다음 기술을 사용할 수 있습니다.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(online.account_id) cnt from online; COMMIT;
이렇게 하면 쿼리가 다음과 같이 강제됩니다. 커밋되지 않은 데이터를 읽은 다음 즉시 트랜잭션을 커밋하여 잠재적인 잠금이나 충돌을 방지합니다.
커밋되지 않은 데이터 읽기 격리 수준을 사용하면 커밋되지 않은 데이터에 액세스할 수 있으므로 데이터 불일치가 발생할 수 있습니다. 잠재적인 위험을 고려하고 필요한 경우 신중하게 사용하는 것이 중요합니다.
위 내용은 잠금 없이 MySQL에서 SELECT 문을 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!