본문 바로가기
MySql

MySQL 동시성, 작동 원리 및 내 애플리케이션에서 처리해야합니까?

by 베이스 공부 2020. 10. 20.
반응형

현재 MySQL 데이터베이스를 실행하고 있습니다. 내 모든 테이블은 테이블 엔진 InnoDB를 사용하고 있습니다.

내 응용 프로그램에 로그인하는 모든 사람이 레코드를 볼 수 있으며 어느 시점에서 두 명의 사용자가 동시에 레코드를 업데이트하거나 삽입 할 수 있을지 걱정됩니다. MySQL은 이러한 유형의 동시성 문제를 정상적으로 처리합니까, 아니면이 문제를 내 코드에 프로그래밍해야합니까?

내 코드에 프로그래밍해야한다면 이와 같은 동시성 케이스를 어떻게 처리할까요?

 

해결 방법

 

SQL 문은 원자 적입니다. 즉, 다음과 같이 실행하면 :

UPDATE Cars SET Sold = Sold + 1

이 문 중에 아무도 Sold 변수를 변경할 수 없습니다. 다른 사람이 같은 명령문을 동시에 실행하더라도 항상 1 씩 증가합니다.

서로 종속 된 문이있는 경우 문제가 발생합니다.

a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;

이러한 쿼리 사이에 다른 사용자가 Cars 테이블을 변경하고 Sold를 업데이트 할 수 있습니다. 이를 방지하려면 트랜잭션으로 래핑하십시오.

BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;

트랜잭션은 InnoDB에서 지원하지만 MyISAM에서는 지원하지 않습니다.

 

참조 페이지 https://stackoverflow.com/questions/4828490

 

 

반응형

댓글