MySQL은 "for update"키워드를 지원합니다. 다음은 예상대로 작동하는지 테스트 한 방법입니다. 2 개의 브라우저 탭을 열고 다음 명령을 하나의 창에서 실행했습니다. 다른 창에서 업데이트 용 MySQL
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from myxml where id = 2 for update;
....
mysql> update myxml set id = 3 where id = 2 limit 1;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.08 sec)
, 나는 트랜잭션을 시작하고 같은 레코드의 업데이트 잠금을 찍어 보았습니다.
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from myxml where id = 2 for update;
Empty set (43.81 sec)
위의 예에서 볼 수 있듯이 트랜잭션이 트랜잭션이 끝난 후에는 창 없음 1. 다른 응용 프로그램에 의해 처리되고 있었다, 나는 43 초 기록을 선택할 수없는, 내가 선택할 수있어 레코드가 있지만 id 2가 처음 실행 된 트랜잭션에 의해 id 3으로 변경되었으므로 레코드가 리턴되지 않습니다.
제 질문은 "for update"문법의 단점은 무엇입니까? 창 1에서 실행중인 트랜잭션을 커밋하지 않으면 레코드가 잠긴 것입니까?
귀하의 요구 사항에 매우 좌우되는 "단점"을 참조하십시오. 자물쇠가 필요한 부분에 대해 더 자세히 설명해 주시겠습니까? –
나는 거의 모든 질문에 대한 답변을 수락했다. 원하는 경우 확인할 수 있습니다. 사람들에게 불가능한 일을하도록 요청하는 것을 멈추십시오 :) – shantanuo