【初学者必見!】SQLの基本、実務使用例を徹底解説!SELECT FOR UPDATE編

SELECT FOR UPDATE SQL

※この記事にはプロモーションが含まれています。

ふりかえり

筆者
筆者

本記事は、SQLの基本、実務使用例編になります。

SQLの基礎に関しましては、

【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
A子

本編に入ります!

SELECT FOR UPDATEとは?

  • 「この行をロックするから、他の人は更新・削除できないようにして!」という命令です。
  • トランザクション中に誰かが同じ行を変更してしまうのを防ぐために使います。
  • 一般的には、更新や削除の前に使用します。

いつ使う?

  • 在庫を予約する
  • 銀行口座の残高を変更する
  • 他の人が同じデータを同時に処理しないようにしたいとき

実務レベルの使用例を見ていこう!

筆者
筆者

実際に、SQLを使用してデータを確認していきましょう。

SQLに関しては以下を使用して解説していきます。

create table文、select文、insert文、update文、delete文、

drop table文、につきましては、過去にアップロードした

【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
A子

目次の、「ふりかえり」のところにそれぞれの記事のリンクが

貼ってあるよ!

または、サイドバーのカテゴリーにSQLがあるから、そちらからでも

参照できます!

Oracle Live SQLで実行していきます!

今回、実行するSQLの一覧

テーブルを作成(CREATE文)

create table items (
  item_id number primary key,
  item_name varchar2(100),
  stock number
);

データを登録(INSERT文)

insert into items values (1, 'りんご', 10);
insert into items values (2, 'みかん', 5);
commit;

SELECT FOR UPDATEの使い方

-- トランザクション開始(OracleではBEGINは不要)
select * from items
 where item_id = 1
 for update;

-- 上の行がロックされている間、他のユーザーはこの行を更新・削除できません
-- この後、安心して在庫を減らす処理ができます

update items
   set stock = stock - 1
 where item_id = 1;

commit;

他のユーザーが同じ行を更新しようとすると?

他のセッションで以下のようなSQLを実行しようとすると、ロックが解除(COMMITまたはROLLBACK)されるまで待たされます。

update items
   set stock = stock - 1
 where item_id = 1;

まとめ

内容説明
SELECT FOR UPDATE行をロックして、他人の更新や削除を防ぐ
よくある使い方在庫・口座残高などの更新前に使用
注意点COMMITROLLBACK を忘れると、ロックが解除されず他の人が待たされる
筆者
筆者

SELECT FOR UPDATE編について解説しました。

次回もお楽しみに!

この記事を書いた人
たくたく

文系出身・3年目のWeb系エンジニアです。
C#とSQLを得意としています。
同棲生活は2年目に入り、日々仲良く楽しく暮らしています。
プライベートではバイクや車で旅行に行くことが趣味です。
サンリオ好きで、中でもシナモン推しです。
お酒好きとして毎週の晩酌をリラックスタイムにしています。

たくたくをフォローする
SQLエンジニア
シェアする

コメント

タイトルとURLをコピーしました