>  기사  >  PHP 프레임워크  >  Laravel 트랜잭션에서 비관적 잠금 사용 요약

Laravel 트랜잭션에서 비관적 잠금 사용 요약

藏色散人
藏色散人앞으로
2019-11-20 13:33:203679검색

laravel은 데이터베이스 트랜잭션을 사용하는 데 편리하고 빠른 방법을 제공합니다. 사용 중에 쉽게 혼동되고 오해를 받는 곳이 여러 군데 있습니다. 여기에 기록해 두고 일부 전문가가 제가 잘못한 부분을 지적해 주셨으면 합니다.# 🎜🎜 #

laravel 트랜잭션은 수동 방식과 자동 방식으로 나뉘는데, laravel에서 제공하는 sharedLock이나 lockForUpdate 잠금 테이블 방식을 사용하는 경우 불필요한 문제와 오류를 피하기 위해 수동 제출을 사용하는 것이 좋습니다. 아래 표시된 대로:

Laravel 트랜잭션에서 비관적 잠금 사용 요약

sharedLock(공유 잠금) 및 lockForUpdate(비관적 잠금)에 대해 이야기해 보겠습니다. 및 사용 시 영향

sharedLock(공유 잠금)

sharedLock은 SQL 문과 동일합니다. *select from transaction_test(여기서 type = 1인 경우) lock in share mode;**

은 트랜잭션에서 sharedLock을 사용할 때만 적용되며, 이때 데이터가 위치한 행은 잠기게 됩니다. 다른 작업에 의해 수정되지만 잠겨 있습니다. 데이터는 쿼리 작업에 영향을 미치지 않으며 일반 쿼리이든 트랜잭션의 쿼리 작업이든 영향을 받지 않습니다. 잠긴 데이터는 트랜잭션이 커밋되거나 롤백될 때까지 해제되지 않습니다. SQL 문 *select from transaction_test where type = 1 for update;**

lockForUpdate는 lockForUpdate를 사용할 때 현재 데이터가 있는 행이 잠겨 있습니다. , 다른 트랜잭션의 잠금 테이블 작업은 실행되기 전에 현재 트랜잭션이 제출될 때까지 기다립니다. 그러나 잠금이 아닌 테이블과 일반 쿼리 작업에는 제한이 없습니다. 영향을 받는 것은 역시 수행하는 잠금 테이블 작업뿐입니다. the transaction.

간단히 말하면 공유 잠금이든 비관적 잠금이든 영향을 받는 것은 트랜잭션의 잠금 테이블 작업뿐이며 일반적인 쿼리 작업에는 영향을 미치지 않습니다. -트랜잭션에서 테이블 잠금 작업.

동시에, 비관적 잠금이나 공유 잠금에 관계없이 SQL 문이 인덱스를 포함하고 인덱스를 기반으로 사용한다는 점에 유의해야 합니다. 쿼리 또는 판단을 수행하면 MySQL은 행 수준 잠금을 사용하여 수정될 행을 잠급니다. 그렇지 않으면 테이블 잠금을 사용하여 전체 테이블을 잠급니다. 따라서 사용할 때는 인덱스 사용에 주의해야 합니다. 그렇지 않으면 오류가 발생합니다. 높은 동시성 문제

위 내용은 Laravel 트랜잭션에서 비관적 잠금 사용 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제