「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。今月(2022年10月)からは多忙につき、日々の投稿数を減らします。

MENU

データベースとSQL(09/20)

はじめに

 データ分析を行う場合、データの管理運用、蓄積も重要な論点となる。そのためにはSQLやデータベースの知識が求められる。そこでまずは

を基にSQLの勉強をしていく。

6. データの更新

  • トランザクションとはセットで実行されるべき1つ以上の更新処理の集まりを指す。トランザクションを使用すれば、データベースにおけるデータ更新処理の確定や取り消しなどを管理できる。
  • トランザクションの処理を終わらせるコマンドとして\mathrm{COMMIT,ROLLBACK}の2つがある。
  • \mathrm{DBMS}トランザクションは①原子性、②一貫性、③独立性、④永続性を守らなければならない。これらをACID特性という。

6.4 トランザクションとは何か

 データベースに対する1つ以上の更新の総称をトランザクションという。

6.4.1 トランザクションの作成

 データ操作言語(SELECT, UPDATE, INSERTなど)をDML文というが、これを用いて以下のようにしてトランザクションを生成する:

-- (トランザクション開始文)
-- 
--  DML文①
--  DML文②
--  DML文③
-- 
-- (トランザクション終了文)

-- SQL Serverを想定
BEGIN TRANSACTION

UPDATE (テーブル名1)
SET (列名1) = (値1)
WHERE (条件1)

UPDATE (テーブル名2)
SET (列名2) = (値2)
WHERE (条件2)

COMMIT

トランザクション開始文はRDBMSによって書くべき文言が異なる*1

SQL Server/PostgreSQL \mathrm{BEGIN TRANSACTION}
MySQL \mathrm{START\ TRANSACTION}
Oracle, DB2 (無し)

 RDBMS一般にトランザクションの区切りは以下の2つのいずれかがあり得る:

  1つの\mathrm{SQL}文を1つのトランザクションと見なす(自動コミットモード)。
  ユーザが\mathrm{COMMIT}または\mathrm{ROLLBACK}を実行するまでを1つのトランザクションと見なす。

一般的なDBMSではいずれも選択可能である。SQL Server, Postgre SQL, MySQLなどでは前者が既定になっている。これに対してOracleでは後者をデフォルトにしいているため、ユーザが自分でコミットまたはロールバックを発行するまでトランザクションが終わらない。

終了文には2種類ある(後述)。

6.4.2 COMMIT

 \mathrm{COMMIT}トランザクションに含まれていた処理による変更をすべて反映してトランザクションを完了させるコマンドである。ひとたび\mathrm{COMMIT}するとトランザクション開始前に戻せない点に注意しなければならない。

6.4.3 ROLLBACK

 \mathrm{ROLLBACK}トランザクションに含まれていた処理による変更をすべて破棄してトランザクションを終了させるコマンドである。\mathrm{ROLLBACK}するとデータベースはトランザクションを開始する前の状態に戻る。

6.4.4 ACID特性
  (1) 原子性(Atomicity) トランザクションが終わった時にそこに含まれていた更新処理がすべて実行されるか、すべて実行されずに終わる((たとえば2つのDMLを含んだトランザクションを実行したときに無作為に選ばれた一方しか実行しない、といった事態が発生しないことを意味する。)。)
  (2) 一貫性(Consistency) トランザクションに含まれる処理がデータベースに予め設定された制約(主キー制約や\mathrm{NOT} \mathrm{NULL}制約)を満たす。
  (3) 独立性(Isolation) トランザクション同士は互いに干渉を受けない。
  (4) 永続性(Durability) トランザクション終了後にその時点でのデータ状態が保存される。

*1:Oracle,DB2で明示しないのは、トランザクションが暗黙に解消されることが標準\mathrm{SQL}規格で定められていることに起因する。

プライバシーポリシー お問い合わせ