トランザクション)SQLデータベース初心者データベースに関して理解を深めるためにまとめました。今回は用語のまとめです。SQL編、設計編、後は私が普段RubyやRailsを使っていますので、アクティブレコードが普段何をやっているのか見てみる編などもまとめていこうかと思います。私自身、現在もまだその全貌を掴みきれていないのですが、できる限り文献等にあたりながら、記述することを心がけます。(訂正箇所などお伝えいただけると非常に助かります!)用語の説明は「である」調、心の声や脱線は「ですます」調です。効率よく利用できるための構成をも持つことが期待される。行とか列とかカラムとか緯度や経度がどっちだったけ問題のように私がよく迷いますので、ここでまとめておきます。ロウレコードデータそのもの、行の意味で使われることもフィールドマス一つライフサイクル(CRUD)createデータベースを設計し作成する。read利用者はそこから情報を読み出す。updateデータベースに保存された情報の更新。delete不要になった情報を削除する。Language)データベースを操作するための言語。Language/データ定義言語)データベースそのものや、テーブルを作成したりする。Language/データ制御言語)COMMIT:変更の確定ROLLBACK:変更の取り消しGRANT:操作権限を付与REVOKE:操作権限を剥奪トランザクションデータベースを更新するような単一の処理、いくつかまとまった一連の処理。全ての処理を終え更新内容を確定させるのか、処理をする前の状態に戻すのかの2択となる。一つにまとめて実行させるべき更新処理のまとまり、捉え方を変えれば、複数の処理を一つにまとめることで意味付けを与えることでもある。コミットトランザクション処理を完了し、更新を反映させる。ロールバックトランザクション処理が開始される以前の状態に戻す。例1ユーザの情報登録で、氏名、メールアドレス、住所、電話番号の4つを登録することが必要であるとする。この処理を一つのセット=トランザクションとして捉える。仮にメールアドレスに一意性制約がかかっていたとして、登録ができなかった場合、残りの3つも登録前の段階にロールバックする。中途半端な状態(この例の場合メールアドレスだけ空になる)を許さないということである。例2商品が売れた数だけ販売数を増加させ、その分だけ在庫を減らすというような場合、これも一連の処理として一つにまとめられるべき性質のものである。一方だけ行われることを許せば忽ち現実とデータベースの整合性が取れなくなってしまう。ACID特性トランザクションに求められる4つの性質。原子性(Atomicity)トランザクションの処理の帰結はコミットかロールバックの2つに一つである。(不可分性という訳をされることがあります。こちらの方がわかりやすいと思います。)一貫性(Consistency)あらかじめデータベースに設定された制約と矛盾する処理が含まれていてはならない。そのような処理を含むトランザクションはロールバックされる。(先ほどの例1でロールバックが起きるのは、一意性制約を無視して重複するメールアドレスを登録しようとしたためです。整合性と訳される場合もありますが、こちらの方がわかりやすいと思います。)独立性(Isolation)トランザクション同士の干渉がない。実行中の状態が隠蔽される。独立性の説明あまりイメージが湧かなかったので説明を書いておきます。処理が、「Aの得点から500を引いて、その後にBに500を与える」としましょう。最初の両者の持ち点を1000点とします。1500有り体に言ってしまうと、1のように別に途中の状態を考えなくても、開始前と開始後だけ他から見えるようにしておけば良くないか?ということです。すると処理を直列にしなければならず、処理速度を犠牲にするのでどの程度分離するのかという問題が生じます。私の記事よりもよほど参考になります。ご覧になってください。永続性(Durability)トランザクションが一度終われば、その時点での状態は障害が起きようとも保証される。なし実際には、トランザクションの開始時点は意識しないでも、1つのSQL文を1つトランザクションの中で処理するという暗黙のルールが適用されている場合もある。MySQL)Oracleの場合、ユーザがCOMMITかROLLBACKするまでが一つのトランザクション。前者はSQL文を一つ書くと、自動的に開始宣言とコミットに挟まれるということ。図にCOMMITのI抜けましたごめんなさい。イメージだけ掴んでいただければ。ゆうき@Sobue-Yukiうわー。