# Chapter11-4,5,6 「SQLでデータベースを操作する」「トランザクション管理と排他制御」「データベースの障害管理」 ## 6/3(木) ###### tags:`基本情報技術` さつき: #### chapter11-4 > SQLとはDBMSへ指示を伝えるための言語。 * SELECT文の基本的な書式 * どのような条件で * どの表から * どの列を取り出す * SELECT 列名 FROM 表名 WHERE 条件 * 射影...特定の列を抽出する * SELECT 商品名 FROM 商品表 > でも特定のレコードを取り出すとき、*つけてどう指定するかいまいち。。 * 選択...特定の行を抽出する * SELECT*FROM商品表WHERE単価<200 > では40円以上200円未満は?↓ * 条件を組み合わせて抽出する * SELECT*FROM商品表WHERE単価>40 AND 単価<200 * 表と表を結合する * SELECT*FROM 受注表,顧客表 WHERE 受注表.顧客コード=顧客表.顧客コード > オブジェクトの取り出し方と似てる。 * データを整列させる * ORDER BY 列名 ASC(またはDESC) > SELECT FROM 商品表 ORDER BY 単価 > ※↑ASCは省略可能。 > SELECT FROM 商品表 ORDER BY 単価 DESC * 関数を使って集計を行う * データをグループ化する * GROUP BY 列名 * グループに条件をつけて絞り込む * 過去問 * わかった。 #### chapter11-5 > なるほど〜 * トランザクション...一連の処理をひとまとめにしたもの > 在庫ありました〜 > 在庫更新しなきゃ。今は3か。 > じゃあ2に変更だ。 * 排他制御...ロックする技 * 共有ロック * 専有ロック * ACID特性 * Atomicity(原始性)...全処理終了を待つ。 * Consistency(一貫性)...矛盾のない内容で。 * Isolation(隔離性)...一個で処理させた場合も、変わらない(ちょっとよくわからない) * Durability(耐久性)...障害が発生してもDBから消失しない。 * ストアドプロシージャ * 一連のSQL文をひとつのプログラムにまとめて、DBMS上に保存します。 * メリット...ちまちまSQL文を流さないでいいので、ネットワークの負荷が軽減できる。 * 処理速度の向上が見込める。 * 過去問 * 問1...OK * 問2...OK #### chapter11-6 一旦読んで、過去問するんる。 * 過去問 * 問1 OK * 問2 バックアップファイルじゃないんだ...。 * 問3 OK * 問4 データベースダンプとは、データベースに格納されているデータを、別のファイルに書き出して保存することをいいます。 * 問5 fmfm... にわ: - chapter 11-4 - 読み込み * SQL:DBMSに指示を伝えるための言語 * DDL:スキーマの定義、表の作成など、データ定義 * DML:データ抽出や挿入など、データ操作 * SELECT文 * 射影:特定の列(=カラム)取り出し * クソバカは言いすぎやろ・・・ * 選択:特定の行(=レコード)取り出し * 条件を組み合わせて抽出 * 結合:表と表の結合 * ex)select * from TABLE_A, TABLE_B where TABLE_A.code = TABLE_B.code * ↑MySQLでJOIN句使ってるからこの書き方はあまり見ない * データの整列(order by) * 集合関数:集計する関数。MAX,MIN,SUMなど * グループ化(group by) * グループに条件をつけて絞り込み * UNITGROSSの平均値が100より大きいデータをTYPEでグルーピングして取得 * select TYPE, AVG(UNITGROSS) from PRDLIST group by TYPE having AVG(UNITGROSS) > 100 - 過去問 * OK - chapter 11-5 - 読み込み * 同時更新によるデータの不整合を防ぐためにトランザクション、排他制御を行う。 * トランザクション=データベースでの一連の処理のかたまり * 排他制御=データをロックする技 * 共有ロック * 他ユーザーが読み取り可能、書き込み不可 * 専有ロック * 他ユーザーは読み取りも書き込みも不可 * デッドロック * 複数トランザクションで互いに使いたいデータをロックし、互いにずっとロック解除待ちし続けること * トランザクションで必須とされる「ACID特性」 * Atomicity(原子性) * トランザクションの処理結果は「全て実行される」か「全く実行されない」かのどちらか。中途半端に一部だけ実行されるのはダメ。 * Consistency(一貫性) * DBの内容が矛盾しないこと。トランザクションの処理結果が矛盾を生じさせるようなことになってはダメ。 * Isolation(隔離性) * 複数トランザクションで相互に影響しないこと。 * Durability(耐久性) * 正常に終了したトランザクションの更新結果は障害が発生してもDBから消失しないこと。何らかの復旧手段が確保されていること。 * ストアドプロシージャ * SQL文を一つのプログラムにまとめてDBMSにあらかじめ保存しておくこと * メリット:SQLの受け渡しが不要なのでネットワークの負荷軽減/処理速度の向上 - 過去問 * 問1:OK * 問2:OK - chapter 11-6 - 読み込み * DBは障害が起こっても大丈夫なようバックアップをとるのが基本だが、バックアップとって次のバックアップを取るまでの間が保証されないと困るので、 ジャーナルというログファイルに更新前状態(更新前ジャーナル)、更新後状態(更新後ジャーナル)を逐一記録している。 * 障害が発生したらロールバック、ロールフォワードなどの回復処理を行なって復旧する。 * トランザクションでのロールバックは、更新前ジャーナルからDB更新前状態を取得して戻している。 * 分散データベースシステム:物理的には別々のDBだが見かけ上一つのDBとして扱えるようにしたシステム。 * こういう場合はトランザクションで全体の同期をとってコミットorロールバックする必要がある。 * 2相コミット:全てのDBに対してコミットの可否を問い合わせ、その結果をもってコミットorロールバックを行う。 * ロールフォワード:トランザクションの処理中ではなく、ディスク障害などでDB故障した場合などで行われる。 * 定期的に保存してあるバックアップファイルからデータを復元するが、バックアップ後の更新情報は更新後ジャーナルから取得して復旧する。 - 過去問