mysql楽観的ロック同時問題の解決
ブログ1:根本的な解決策は1つしかありません:キュー、他の言うことは役に立ちません:https://www.cnblogs.com/sheseido/p/5038562.html
ブログ2:https://www.cnblogs.com/laoyeye/p/8097684.html1、バージョン番号を使用して楽観的なロックバージョン番号を実現する方法は2種類あり、1つはデータバージョンメカニズムであり、1つはタイムスタンプメカニズムである.具体的には以下の通りです.
2、使用条件制限による楽観ロックの実現
ブログ3:https://www.cnblogs.com/ssskkk/p/8673374.html
問題の導入
楽観的なロック処理の同時の原理の重点
だから次のように処理することができます(楽観的なロックを利用して物事の同時処理を処理します)
ブログ2:https://www.cnblogs.com/laoyeye/p/8097684.html1、バージョン番号を使用して楽観的なロックバージョン番号を実現する方法は2種類あり、1つはデータバージョンメカニズムであり、1つはタイムスタンプメカニズムである.具体的には以下の通りです.
3 :
1.
select (status,status,version) from t_goods where id=#{id}
2.
3. status 2
update t_goods
set status=2,version=version+1
where id=#{id} and version=#{version};
2、使用条件制限による楽観ロックの実現
UPDATE t_goods
SET num = num - #{buyNum}
WHERE
id = #{id}
AND num - #{buyNum} >= 0
AND STATUS = 1
ブログ3:https://www.cnblogs.com/ssskkk/p/8673374.html
問題の導入
REPEATABLE_READ : select 。
READ COMMITTED : select 。
Mysql repeatable_read :https://www.cnblogs.com/kangshuai/p/5735374.html
: select ( commit) 。
: , update , commit update 。
楽観的なロック処理の同時の原理の重点
1) select , ( REPEATABLE_READ )。 。
2) select , where 。 , , 。
だから次のように処理することができます(楽観的なロックを利用して物事の同時処理を処理します)
( ), , update where +1,
1)select num,version from table;
2)update table set num=num-1 ,version =version+1 where condition=? version=#{version}
3)Query OK, 1 rows affected (0.04 sec) | :1 rows affected
update where +1: update table set num=num-1 ,version =version+1 where condition=? version=#{version}
where version, update (Query OK, 1 rows affected (0.04 sec)) 0 。()