※当サイトの記事には、広告・プロモーションが含まれます。

コマンドプロンプト、trigger,delimiterを終え、transaction,rollback,からのcommit

トリガーの作成

トリガを作成するとテーブルに対してデータの追加や更新などが行われた場合に、自動的に別のSQL文を実行するように設定することができます。

例:delimiterはtriggerの含まれる文の直前と直後に

mysql > create table tb1m select * from tb1;

(テーブルtb1の全てを持ってきたテーブルtb1mを作成。中身はtb1。)

mysql > create table tb2m like tb1;

(テーブルtb1の構造のテーブルtb2mを作成。中身は空。)

delimiter //

(mysql文の終わりを;から//に変更。)

mysql > create trigger tr1 before update on tb1m for each row

-> begin

-> insert into tb2m values(old.bang,old.nama,old.toshi,old.umare);

(ここでinsert文が実行されないように上でdemiliterでmysql文の終わりを変えてます。)

-> end

-> //

mysql > delimiter ;

(mysql文の終わりを//から;に変更。)

mysql > update tb1m set bang='A106',nama='hoge',toshi=31,umare='Japan' where bang='A106';

mysql > select * from tb1m;

mysql > select * from tb2m;

 

 トランザクションの構成と実行

transaction ⇒ トランザクションは、複数のユーザーが同時にデータベースを操作する状況において、データベースに対する複数の操作(選択、更新、削除など)を実行している途中で仮にエラーが発生したとしても、データの不整合が起きないことを保証するリレーショナルデータベースシステム(RDBMS)のメカニズムです。 start transactionとsql文を記述することで、その後実行される複数の操作は、どの操作もいったん仮の状態で実行され、正常な実行の確認にとどまります。この段階では、データベースにデータの変更は反映されません。

commit ⇒ トランザクションの確定を指示し、それまで仮の状態だった変更操作が、一気にデータベースへ反映されます。この処理を、「コミット処理」と呼びます。

rollback ⇒ 何らかの理由でデータベースの変更が不可能である場合に、それまでのトランザクション中のすべての操作を中止し、元の状態に戻します。この処理を「ロールバック処理」と呼びます。

例:修正(ここではinsert文)で間違いない場合、そのままcommit

mysql > start transaction;  

mysql > insert into tb values(bang='A101',nama='hogejirou',toshi=31,umare='Japan');

mysql > commit;

 

例:修正(ここではdelete文)を取り消したい場合、rollback

mysql > start transaction;  

mysql > delete from tb;

mysql > rollback;

mysql > commit;

    ↓ トランザクションについては下記サイトで丁寧に説明してくれています。

トランザクションの詳しい話 

f:id:ts0818:20150306211730g:plain

f:id:ts0818:20150306200717g:plain

今回はこのへんで。