トップページ -> 研究道具箱と入門演習 -> データベース特論・支援 Web ページ -> トランザクション
[サイトマップへ]   [全文検索へ]   [統計情報へ]   [掲示板へ]  

トランザクション















演習

演習を行うために必要になる機能や文法

  • BEGIN TRANSACTION, COMMIT, ROLLBACK

    SQL 挿入文 (insert statement) などでのデータベース更新を行うときは,最初に「BEGIN TRANSACTION;」を実行する. データベース更新が終わったら「COMMIT;」または「ROLLBACK;」を実行する.

  • DELETE FROM <table-name> WHERE <expression>;

    条件に合致する行の削除

  • UPDATE <table-name> SET <attribute-name>=<expression> WHERE <expression>

    条件に合致する行に関するデータの更新

  • now

    現在の日時を取得する SQLite3 の関数

    A SQLite3 function to get the current datetime.

  • datetime

    日時のデータを「YYYY-MM-DD HH:MM:SS」形式の文字列に変換する SQLite3 の関数

    A SQLite3 function to convert a datetime data into the string like "YYYY-MM-DD HH:MM:SS".


    Sqliteman の起動と終了 (Start and end Sqliteman)

    1. Sqliteman の起動 (Start Sqliteman)

      「Sqliteman」 のアイコンをダブルクリック (double click "Sqliteman.exe")

      Sqliteman のウインドウが開く.(A New window appears)

    2. 終了 (End Sqliteman)

      File」→ 「Exit」で終了.


    Sqliteman で既存のデータベースを開く (Open an existing database using Sqliteman)

    以下の手順で,既存のデータベース「C:\SQLite\mydb」を開く. (Open an existing database 'C:\SQlite\mydb')

    1. File」→ 「Open

    2. データベースファイル C:\SQLite\mydb を選び, 「開く」をクリック (Click '開く' after choosing the database file "C:\SQLite\mydb")

    3. データベースの中身が表示されるので確認する (Database appears)

    4. 「Tables」を展開すると,テーブルの一覧 (List of Tables) が表示されるので確認する (List of tables appears by clicking 'Tables')


    SQL を用いたテーブル定義と一貫性制約の記述 (Table definition and integrity constraint specification using SQL)

    SQL を用いて,E テーブルを定義し,一貫性制約を記述する. (Define table 'E' and specify integrity constrants of the table using SQL)

    リレーショナル・スキーマ (relational schema): score_records(name, score, student_name)
    
    1. E テーブルの定義 (Define a table)

      次の SQL を入力し,「Run SQL」のアイコンをクリック (Write the following SQL, and click "Run SQL" icon).

      CREATE TABLE E (
          name          TEXT     NOT NULL,
          score         INTEGER  NOT NULL CHECK ( score >= 0 AND score <=100 ),
          student_name  TEXT     NOT NULL,
          created_at    DATETIME NOT NULL,
          updated_at    DATETIME,
          UNIQUE (name, student_name) );
      

    2. コンソールの確認 (Inspect console)

      エラーメッセージが出ていないことを確認


    SQL を用いたテーブルへの行の挿入 (Insert rows into a table using SQL)

    テーブルの 'created_at' 属性には,行を挿入する日時を記録する

    以下の手順で,SQL を用いて E テーブルへの行の挿入を行う (Insert rows into table 'E' using SQL)from

    1. SQL プログラムの記述

      「INSERT INTO ...」は行の挿入.ここには 4つの SQL 文を書き, 「BEGIN TRANSACTION」と「COMMIT」で囲む. ("INSERT INTO ..." means inserting a row into a table. Four SQL statements are wrote).

      BEGIN TRANSACTION;
      INSERT INTO E VALUES( 'Database',    80, 'KK', datetime('now'), NULL );
      INSERT INTO E VALUES( 'Database',    95, 'AA', datetime('now'), NULL );
      INSERT INTO E VALUES( 'Database',    80, 'LL', datetime('now'), NULL );
      INSERT INTO E VALUES( 'Programming', 85, 'KK', datetime('now'), NULL );
      INSERT INTO E VALUES( 'Programming', 75, 'LL', datetime('now'), NULL );
      COMMIT;
      

    2. 複数の SQL 文の一括実行 (Run multiple SQL statements)

      複数の SQL 文を一括実行したいので,カーソルを先頭行に移動した後に, 「Move the cursor to the top statement. Click "Run multiple SQL statements from current cursor position in one batch" icon)

    3. 「Script Output」ウインドウの確認 (Inspect "Script Output" window)

      エラーメッセージが出ていないことを確認


    SQL 問い合わせの発行と評価結果の確認 (Issue SQL queries and inspect the results)

    SQL を用いた問い合わせの実行例を示す.

    テーブルの全ての行の表示 (List all rows of a table)

     
    SELECT * FROM E;
    

    条件を満足する行のみの表示 (List the rows which satisfy a given condition)

     
    SELECT * FROM score_records WHERE name = 'Database';
    

     
    SELECT score FROM score_records WHERE name = 'Database';
    


    Sqliteman を用いたデータのブラウズ (Browse Data using Sqliteman)


    SQL を用いた更新 (Update using SQL)

    SQL を用いたデータの更新 (update)の実行例を示す. SQL は「UPDATE <table-name> SET <attribute-name>=<expression> WHERE <expression>」の形になる.


    SQL を用いた行の削除 (Delete row(s) using SQL)

    SQL を用いた行の削除 (delete row(s))の実行例を示す. SQL は「DELETE FROM <table-name> WHERE <expression>;」の形になる.


    ジャーナルファイルの確認 (Example a journal file)

    1. SQL プログラムの記述

      今度は COMMIT を書かない (Without COMMIT)

      BEGIN TRANSACTION;
      INSERT INTO E VALUES( 'Database',    90, 'BB', datetime('now'), NULL );
      INSERT INTO E VALUES( 'Programming', 95, 'BB', datetime('now'), NULL );
      

    2. 複数の SQL 文の一括実行 (Run multiple SQL statements)

      複数の SQL 文を一括実行したいので,カーソルを先頭行に移動した後に, 「Move the cursor to the top statement. Click "Run multiple SQL statements from current cursor position in one batch" icon)

    3. 「Script Output」ウインドウの確認 (Inspect "Script Output" window)

      エラーメッセージが出ていないことを確認

    4. ジャーナル・ファイルの確認 (Journal File)

      C:\SQLite を開く.「mydb-journal」がジャーナル・ファイルである.

    5. Sqliteman で COMMIT の発行 (COMMIT)
      COMMIT; 
      

    6. 「Script Output」ウインドウの確認 (Inspect "Script Output" window)

      エラーメッセージが出ていないことを確認

    7. ジャーナル・ファイルの確認 (Journal File)

      C:\SQLite を開く.COMMIT を発行した.データベースの修正は終わっている.そのためジャーナルファイルが消えている.


    ROLLBACK の確認 (Example a journal file)

    1. SQL プログラムの記述

      今度も COMMIT を書かない (Without COMMIT)

      BEGIN TRANSACTION;
      INSERT INTO E VALUES( 'Database',    95, 'CC', datetime('now'), NULL );
      INSERT INTO E VALUES( 'Programming', 80, 'CC', datetime('now'), NULL );
      

    2. 複数の SQL 文の一括実行 (Run multiple SQL statements)

      複数の SQL 文を一括実行したいので,カーソルを先頭行に移動した後に, 「Move the cursor to the top statement. Click "Run multiple SQL statements from current cursor position in one batch" icon)

    3. 「Script Output」ウインドウの確認 (Inspect "Script Output" window)

      エラーメッセージが出ていないことを確認

    4. ジャーナル・ファイルの確認 (Journal File disappears)

      C:\SQLite を開く.「mydb-journal」がジャーナル・ファイルである.

    5. E テーブル のブラウズ (Browse table 'E')

      「INSERT INTO E VALUES( 'Database', 95, 'CC', datetime('now'), NULL );」, 「INSERT INTO E VALUES( 'Programming', 80, 'CC', datetime('now'), NULL );」の結果がデータベースに反映されているように見える. (It seems that database update is finished)

    6. Sqliteman で ROLLBACK の発行 (ROLLBACK)

      今度は ROLLBACK を発行する.(Issue ROLLBACK)

      ROLLBACK; 
      

    7. 「Script Output」ウインドウの確認 (Inspect "Script Output" window)

      エラーメッセージが出ていないことを確認

    8. データベース・ファイルとジャーナル・ファイルの確認 (Journal File disappears)

      実はデータベースファイルは一切修正されていない (Database file is unchaned. It is observerd by using the file timestamp).

    9. E テーブル のブラウズ (Browse table 'E')

    演習問題と解答例

    次の問いに答えよ.その後,下記の解答例を確認せよ. Answer the following questions. Then, inspect answers described below.

    問い (Questions)

    次の PTABLE テーブルに関する問題 (About the following 'PTABLE' table)

    name    |  type   |  color
    ------------------------------
    apple   |  fruit  |  red
    apple   |  fruit  |  blue
    rose    |  flower |  white
    rose    |  flower |  red
    rose    |  flower |  yellow
    
    1. PTABLE を次のように更新する SQL を書きなさい (Write a SQL which updates the table).
      name    |  type   |  color
      ------------------------------
      apple   |  fruit  |  red
      apple   |  fruit  |  blue
      rose    |  flower |  white
      rose    |  flower |  red
      rose    |  flower |  blue
      
    2. さらに,PTABLE から行を削除し,次のテーブルに変更する SQL を書きなさい (Write a SQL which delete a row).
      name    |  type   |  color
      ------------------------------
      apple   |  fruit  |  red
      rose    |  flower |  white
      rose    |  flower |  red
      rose    |  flower |  blue
      

    解答例 (Answers)

    1.  
      UPDATE PTABLE SET color='blue' WHERE name='rose' AND type='flower' AND color='yellow';
      
    2.  
      DELETE FROM PTABLE WHERE name='apple' AND type='fruit' AND color='blue';