MySQLの基礎を勉強してみた3
トリガ
トリガとは
テーブルに対して INSERT, UPDATE, DELETE などのコマンドが実行されたとき、それを引き金に特定のコマンドを実行できる機能。
トリガのコマンドを実行するタイミング
コマンドを実行するタイミングはそのきっかけとなるコマンドの実行直前と実行直後から選択する。
BEFORE | きっかけとなるコマンドが実行される直前 |
---|---|
AFTER | きっかけとなるコマンドが実行される直後 |
カラムの値
また、きっかけとなるコマンドの実行直前の値と実行直後の値も任意のカラムのものを取得できる。
OLD.カラム名 | きっかけとなるコマンドが実行される直前の「カラム名」の値 |
---|---|
AFTER.カラム名 | きっかけとなるコマンドが実行された直後の「カラム名」の値 |
メリット
例えば INSERT が実行されたとき、同じデータを別のテーブルに INSERT するよう設定しておけば、自動でバックアップを作成することができます。
トランザクション
ストレージエンジンとトランザクション
MySQLにおいて、検索やファイル操作などの処理を行う部分がストレージエンジンです。
MySQLにおける代表的なストレージエンジンとその特徴は以下の通りです。
ストレージエンジン | 特徴 |
---|---|
MyISAM | 高速、デフォルト |
InnoDB | トランザクションに有効、MyISAMより低速 |
トランザクションとは
複数の機能をまとめて扱う機能をトランザクションといいます。トランザクションを始めてから、結果をデータベースに反映させることをコミット、また反映しないで元に戻すことをロールバックといいます。
トランザクションの使用
トランザクション使用の流れは次の通り。
# トランザクションの開始 mysql> START TRANSACTION; # コマンドを実行 mysql> DELETE FROM テーブル名; # コミット mysql> COMMIT;
コマンド実行時にエラーが生じたなど、実行結果を反映せずにトランザクション開始前の状態に戻したい場合は ROLLBACK を使います。
# トランザクションの開始 mysql> START TRANSACTION; # コマンドを実行 mysql> DELETE FROM テーブル名; (エラーが生じた) # ロールバック mysql> ROLLBACK;
コミット前のテーブル
トランザクションを開始し、コマンドを実行してからコミットするまでの間は、トランザクションを実行したMySQLモニタでは実行結果が反映され、それ以外のMySQLモニタでは反映されていない状態になります。
先の例では
# トランザクションの開始 mysql> START TRANSACTION; # コマンドを実行 mysql> DELETE FROM テーブル名; # 実行結果の確認 mysql> SELECT * FROM 削除したテーブル名; Empty set (0.00 sec) (トランザクションを実行したMySQLモニタ以外ではテーブルが存在する) # コミット mysql> COMMIT; (全てのMySQLモニタでテーブルが削除される)
まとめ
本シリーズはここまでです!
機能系は知らないの多かったなー。
勉強すればするほどシステム組むときのMySQLの裁量が大きくなりますね。