2011-06-15 5 views
0

Java의 여러 스레드로 mysql 데이터베이스에 연결하고 있습니다. 경우에 따라 불일치이 표시되도록 스레드가 데이터베이스 테이블의 동일한 열을 읽고 업데이트하는 경우가 있습니다. Java에는 synchronized 키워드가있어 하나의 자원에 대한 액세스를 제한합니다. mysql 데이터베이스에 제한이 있습니까? 이러한 불일치가 발생하지 않도록하려면?mysql은 한 번에 하나의 액세스 만 보장합니다.

답변

2

적합한 격리 수준의 트랜잭션을 사용해야합니다.

간단한 예 :

BEGIN TRANSACTION 
... 
COMMIT 

Mysql docs about transactions
Mysql docs about isolation levels.

+2

거래는 Innob에서만 가능합니다. MyIsam의 경우 테이블 잠금을 사용해야합니다. http://dev.mysql.com/doc/refman/5.0/fr/lock-tables.html – regilero

+0

이미 사용 중입니다. 저장 프로 시저, 그들은 같은 기능을 procide 않는거야? 또한 10 개의 트랜잭션 또는 테이블 잠금이있는 경우 데이터 일관성을 제공합니까? 트랜잭션/잠금은 다른 스레드에 의해 개별적으로 실행됩니다. – Vilius

0

버전 열을 사용하여 작업하면서 누군가가 데이터를 엉망으로 만들었는지 알 수 있습니다.

의미 : datetime 유형의 "updated"라는 열을 추가하고 업데이트 할 때마다 업데이트 된 것이 db의 행과 동일하다는 것을 확인합니다. 누군가가 자신의 레코드에서 작업 한 것을 모르는 경우입니다.

관련 문제