0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

リレーショナルデータベースに少しだけ詳しく踏み込んでみる。(トランザクションとかロックとか)

Last updated at Posted at 2020-03-06

今日は、DBについてどのように一貫性を保証しているのか調べて見ました。

データベースの基本

  • データベースの定義は、ある目的の為に体系的に集められたデータの事を言います。
  • データのまとまりとしては、ファイルやフォルダも同様ですが、それらとの違いは
    • ファイル・フォルダ:個人でのデータ管理を目的としている
    • データベース:複数人でのデータ管理を目的としてる
      • DBの特徴
        • データの共用:複数人で使えるよ
        • データの一貫性:複数人で使っても不具合がない仕組みだよ
        • データの独立:プログラムと独立しているよ

              な特徴があります。

  • DBを利用したシステム(MySQL・PostgresSQL)の事をDMMS(データベース管理システム)と言います。

DBモデルの種類はありますが、一般的に使われるのがリレーショナルデータベースです。
d2c733c3-19a8-4754-895f-e0e04f5337f9.png

リレーショナルデータベースの概要

  • リレーションは関連づけという意味で、行と列で表された二次元のデータ構造を複数関連づけているイメージです。
    • 特徴
      • 行を一意に識別するための主キー:PrimalyKeyをもつ
      • データ操作はSQLでRDBMSを介して行う
1a1d7984-8e9a-42fd-b07d-457161f404bc.png

データベースの制御

では、どのように一貫性を保つ仕組みがあるのでしょうか?

トランザクション

トランザクションとは、DB処理に対するいくつかの処理が意味を成す一つのまとまりです。

8b5c9b12-ed52-4dd7-91d1-1ad22f6f4dcb.png

例でよく出るのが口座振替です。
これは、出金と入金が両方成立しないと、やばいことになります。
両方成立して初めて意味をなします。

ここで、疑問が生じました。データの始まりと終わり(意味を成すまとまり)をどこで定義しているのか?

PostgreSQL では、BEGIN 文または START TRANSACTION 文でトランザクションが開始されます。この後 COMMIT 文を実行するまでは、INSERT/UPDATE/DELETE によるデータ更新は保留され、データベースにはすぐには反映されません。COMMIT 文を実行することで、トランザクションが終了し、データの変更がまとめてデータベースに反映されます。また ROLLBACK 文を実行することでもトランザクションが終了しますが、この場合はトランザクション内でのデータの変更がすべてキャンセルされます。

https://oss-db.jp/dojo/dojo_01

基本は一つのSQL文に対して、BEGIN あるいは START TRANSACTION を実行しなくても自動的にトランザクションが開始され、COMMIT 実行が行われているようです。

トランザクションのコマンド
BEGIN・START TRANSACTION:トランザクションの開始します。
COMMIT・END:コミットしてトランザクションの終了します。
ROLLBACK・ABORT:トランザクションを途中停止し処理を最初からすべて取り消します。

仕様によってはトランザクションをOFFにするケースもあります。
デフォルトではAuto CommitはONになっていますが、AUTOCOMMIT変数にonまたはoffを指定すれば、自動コミットの有効・無効を設定できます。

ロック(同時実行の制御)

ロックとはその名の通り、同時にデータの変更を行おうとした際に、片方の変更を禁じます。

ロックに関しては、こちらの方の記事が参考になります。
データベースの「ロック」という概念は2種類ある

#####アプリケーション側でのSQLを設定すれば、トランザクションも自由設定できるようですね。

<参考>
PostgreSQL 7.2.3 チュートリアル
https://www.postgresql.jp/document/9.4/html/tutorial-transactions.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?