0

이 두 동시성 제어가 어떻게 일반 영어로 작동하는지 이해했습니다. 그러나 나는 비관적 인 통제가 코드에서 어떻게 이루어져야하는지 더 관심이있었습니다. 여기에 내가 어떤 느낌,의 두 사용자가 위키 문서를비관적 인 대 낙관적 인 동시성 제어 구현

비관적 제어 여기

를 업데이트하려고하는 가정하자, 우리는 거래의 사용을 듣는다.

BEGIN 
    SELECT DOC FROM WIKI WHERE DOC_ID = 1; 
    /* business logic */ 
    UPDATE WIKI SET DOC = INPUT WHERE DOC_ID = 1; 
END 

그러나 여전히 이전 업데이트를 덮어 쓰는 경향이 있습니다. 트랜잭션 내에서 select 문 다음에 쓰기가 발생했는지 여부를 확인하기 위해 두 번째 검사가 필요하다고 느낍니다. 예 롤백 또는 다른 커밋 인 경우입니다. 나 맞아? 여러 사용자가있을 경우 잠금하면 교착 상태가 발생할 수 있음을 염두에

Table level Locking and Row Level Locking:

그러나 곰 :

+0

'다른 사용자가'SELECT '와'UPDATE '사이에 어떤 일을했기 때문에'SELECT '와'UPDATE '가 * 다른 * 데이터에서 작동 할까 우려된다면 그 대답은 - 아니요, * IF ** 거래 중입니다. 왜? 트랜잭션이 환경을 격리하고 데이터 * 스냅 샷 * 작업을하기 때문에. 아무것도 잠그지 않아도됩니다. 트랜잭션중인 경우 MySQL은이를 처리합니다. 매뉴얼 페이지에서 [MySQL의 사용 가능한 격리 수준] (https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html)을 확인할 수 있습니다. –

답변

1

당신은이 개 (비관적) 동시성의 선택할 수 있습니다. 동시성을 사용할 때 고려해야 할 사항이 많이 있습니다. 행운을 빕니다!

UPDATE :

사용자가 특정 기록을 체크 아웃 할 때, 그것은 다른 사람을 방지 할에 어디 교착 상태 및 기타 동시성 문제가 발생할 수 있습니다 잠금 것은, 당신은에-확인하고 체크 아웃 기능을 구현할 수 있기 때문에 사용자가 동일한 레코드를 체크 아웃합니다.