MySQLの共有ロック・排他ロックについて

MySQLの共有ロック・排他ロックについて

データベースのロックというのは、更新系の処理(UPDATE/DELETE)を行う場合に、複数の処理を同時並行しても矛盾が起きないための物です。
具体的には、在庫管理テーブルなどがあった場合、以下のように複数の処理を行います。
処理1、在庫数を取得する
処理2、在庫数をマイナス1する

この場合で矛盾が起きるのは、例えば在庫が残り1個しかないのに、複数の接続(Aさん、Bさん、Cさん)が全くの同時に在庫数を取得し、それぞれが-1したら在庫数が-2になってしまします(^_^;)
こういった矛盾が起きないようにする機構がロックです。ロックには以下の二種類があります。
1,共有ロック(自分以外にも読み取りだけOK、更新はさせない)
begin;
select * from tbl_stock lock in share mode;
commit;

2,排他ロック(自分以外には、読み取りも更新もさせない)
begin;
select * from tbl_stock for update;
commit;

在庫数を減らす処理などは、排他ロックでないとダメです。
更新はせずにリアルタイムに在庫数を表示させるだけの処理がある場合には、共有ロックで読み取りだけOKにします。

ちなみにデータベース・エンジンは、InnoDBでないとトランザクションが使えません。
MyISAMではダメ(SELECT系ばっかりなら、こっちの方が速度的アドバンテージがある)