mysql에서 for update의 사용법은 "select * from table where...for update"를 사용하여 쿼리 중에 행에 배타적 잠금을 추가할 수 있습니다. 가져왔지만 쓰거나 업데이트할 수 없습니다.
이 튜토리얼의 운영 환경: windows10 시스템, mysql8.0.22 버전, Dell G3 컴퓨터.
동시성이 높고 데이터 정확성에 대한 요구 사항이 높은 시나리오에 직면하면 업데이트를 이해하고 사용해야 합니다.
for update의 기능은 쿼리 중에 행에 배타적 잠금을 추가하는 것입니다. 트랜잭션 작업이 완료되지 않으면 다른 트랜잭션이 읽을 수는 있지만 쓰거나 업데이트할 수는 없습니다. 예를 들어 돈, 재고 등에 관한 것입니다. 일반적으로 이러한 작업은 긴 시리즈이며 트랜잭션을 시작합니다. 처음 읽을 때 인벤토리가 1인데 다른 프로세스에서 즉시 인벤토리를 0으로 업데이트하고 아직 트랜잭션이 종료되지 않은 경우 잘못된 데이터가 계속 실행되어 문제가 발생합니다. 따라서 높은 동시성 중에 데이터 오류를 방지하기 위해 데이터를 잠그는 업데이트가 필요합니다. 하나의 원칙을 기억하세요: 하나의 잠금, 두 개의 판단, 세 개의 업데이트2. 업데이트에 사용하는 방법
사용 자세:
select * from table where xxx for update
3 업데이트용 잠금 테이블
InnoDB는 기본적으로 행 수준입니다. 명시적으로 지정된 기본 키가 있는 경우 이는 행 수준 잠금입니다. 그렇지 않으면 테이블 수준입니다.
예: 테이블 food에 id, name, status의 세 가지 필드가 있다고 가정합니다. id는 기본 키이고 status에는 인덱스가 있습니다. 예제 1: (기본 키를 명시적으로 지정하고 이 레코드가 있는 경우 행 수준 잠금)SELECT * FROM foods WHERE id=1 FOR UPDATE; SELECT * FROM foods WHERE id=1 and name=‘码农编程进阶笔记’ FOR UPDATE;예 2: (기본 키/인덱스를 명시적으로 지정하며 해당 레코드가 없는 경우 잠금이 없음)
SELECT * FROM foods WHERE id=-1 FOR UPDATE;예 3: (기본 키/인덱스 없음, 테이블 수준 잠금)SELECT * FROM food WHERE name='Coder 프로그래밍 고급 참고 사항' FOR UPDATE;예 4: (불명확한 기본 키/인덱스, 테이블 수준 잠금 )
SELECT * FROM foods WHERE id<>‘3’ FOR UPDATE; SELECT * FROM foods WHERE id LIKE ‘3’ FOR UPDATE;
4.for 업데이트에 대한 참고 사항
1. 업데이트는 InnoDB에만 적용 가능하며 시작과 커밋 사이에 트랜잭션이 활성화되어야 합니다.
2. 업데이트를 위한 테이블 잠금 상황을 테스트하려면 MySQL의 명령 모드를 사용하여 두 개의 창을 열어 테스트할 수 있습니다. 추천 학습:mysql 비디오 튜토리얼
위 내용은 mysql에서 업데이트에 대한 사용법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!