>

서버 측에 PHP와 MySql (InnoDB)을 사용하는 작은 POS 시스템이 있습니다. "판매"가 완료되면 업데이트 재고 수량에 대해 다음 쿼리가 실행됩니다.

"UPDATE products SET qty=qty-:qty, ustatus=1 WHERE pid=:pid";

이 문장이 "동시성 업데이트 보안"입니까? 트랜잭션이나 잠금 테이블이 필요하다는 것을 의미합니다.

이와 같은 여러 쿼리가 동시에 실행되는지 확인하고 싶습니다. 내 주식을 망치지 않습니다.

  • 답변 # 1

    <올>

    innodb를 사용하면 모든 sql 문이 트랜잭션에서 실행되므로이를 명시 적으로 지정할 필요가 없습니다.

    동시 제어는 트랜잭션이 아닌 잠금을 통해 수행됩니다. 거래는 자물쇠의 수명 만 결정할 수 있습니다.

    업데이트 명령문은 수정하려는 레코드에 독점 잠금을 설정합니다. 즉, 독점 잠금이 해제 될 때까지 다른 명령문이 잠긴 레코드를 수정할 수 없습니다 (때로는 읽을 수도 없음). 따라서 귀하의 진술은 동시성 관점에서 안전합니다.

  • 이전 스칼라 케이스 클래스, 생성자에서 매개 변수 수정
  • 다음 단일 Spring 앱에서 여러 인증 프롬프트