プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • データベース
  • 【DBスペシャリスト】「トリガ」について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【DBスペシャリスト】「トリガ」について

08.14

  • miyabisan2
  • コメントを書く

この記事は1分で読めます

トリガとは?

特定のテーブルに対する操作(挿入・更新・削除)をトリガーとして、あらかじめ定義された処理を自動的に実行する機能のことです。例えば、社員テーブルが更新されたタイミングで担当者テーブルも自動的に更新させるようにする等です。

メリット

テーブル間のデータの整合性を保つようにすることが可能です。

デメリット

ビジネスロジックがアプリとデータベースで分散してしまいます。なので基本的にトリガは使わない方が良いと言われています。「そこにロジックがあったのかあ」とアプリの実装コードだけ読んでいても気づくことができないですからね。

ただ、昔からのシステムとかであればトリガーを使って実装してあるというケースも少なくないので存在だけは知っておいてもし利用されていた場合にある程度は追えるようにしておく心構えは重要だと思います。

用途

用途 説明
イベントロギング 監査やセキュリティ要件実現のため
ビジネスルールの実現 何らかの理由でアプリ側ではなくRDBMS側で処理を実行したい場合

タイミング

処理を実行する直前と直後にそれぞれトリガを作成することが可能です。

構文

1
2
3
4
5
6
7
8
9
10
CREATE
    TRIGGER トリガー名
    (BEFORE | AFTER) (INSERT/UPDATE/DELETE)
    OF 対象列 ON 対象のテーブル
    REFERENCING (NEW/OLD) ROW AS 行の別名
    FOR EACH (ROW/STATEMENT)
    WHEN (条件式:REFERENCINGで定義した別名を使える。)
    BEGIN
      トリガで実行したいSQL
    END

OF 対象列 ON 対象のテーブル

対象テーブルの対象列が更新された際にトリガを発動させれます。OFを省いたら対象テーブルだけに範囲を広げることが可能です。

REFERENCING (NEW/OLD) ROW AS 行の別名

NEWであれば操作後の行、OLDであれば操作前の行に対する別名を指定します。後続のWHEN等でトリガを実行する際の条件等を指定する場合は活用することができます。

FOR EACH (ROW/STATEMENT)

ROW

行ごとにトリガ を実行します。1回のSQLで行ごとに複数回トリガ を実行することが可能です。

STATEMENT

一回のSQLに対して1回のみトリガ を実行します。

WHEN (条件式:REFERENCINGで定義した別名を使える。)

トリガを実行する条件を指定するために指定します。

スポンサーリンク
  • 2020 08.14
  • miyabisan2
  • コメントを書く
  • データベース
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 04.28

    【データベース】トランザクションが競合しないための仕組み(ロック、分離レベル)

  2. 2020 12.13

    【データベース】「顧客テーブル」のテーブル設計

  3. 2018 04.29

    【データベース設計】ハードウェアのサイジング(容量と性能)を決める。(物理設計)

  4. 2018 04.08

    【データベース設計】テーブルを作る際の基本ルール(物理設計)

  5. 2021 10.03

    【設計】RDBの基本思想(ソートが苦手)、大きなデータをソートしたい場合

  6. 2018 04.29

    【データベース設計】物理的なファイル配置の検討(物理設計)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【DBスペシャリスト】「生産管理」業務、「発注・仕入・…

【SQL】読みやすいSQLを作るための手法(WITH句…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー