メインコンテンツにスキップ
モジュール 12 · レッスン 4 / 4コース内の 48/57~12 min
モジュールのレッスン (4/4)

実践的なトリガーと監査

スマート弾丸 (トリガー機能) を作成する方法を学んだので、イベントを待っている実際のプライム武器にそれらを取り付ける必要があります。実際のトリガーが登場します。 トリガーは、以前に作成した関数を正式にアタッチし、指定されたテーブルで特定の CRUD イベントの「前」または「後」に起動するように指示します。

多くのオプションがあります。たとえば、FOR EACH ROW は影響を受ける行ごとに 1 回実行するため、一括クエリが 500 万行を超える GLOBAL UPDATE である場合、500 万回のマイクロ実行が実行されることになります。その点には注意してください。

SQL
CREATE TRIGGER sync_inventory_trigger
-- Event options
AFTER INSERT OR UPDATE ON order_items
-- Modus operandi (singular or global macro-block FOR EACH STATEMENT)
FOR EACH ROW
-- Run the forged action
EXECUTE FUNCTION update_stock();

トリガーは JavaScript には見えず、エンジンに安全に送信された更新に厳密に基づいて自律的にストックを完全に一貫した状態に保ちます。

Updated_At の自動化

JS 更新モデルで { updated_at: new Date() } を渡すのを忘れるという、常緑のビジネス上の問題があります。トリガー関数 set_updated_at と BEFORE UPDATE トリガーを組み合わせると、この煩わしさが解消され、すべてのレコード変更が自動的に自動的に更新されます。

自分で試してみてください

運動#sql.m12.l4.e1
試行回数: 0読み込み中…

「trg_force_uppercase」という名前のトリガーを作成します。\nこれを「customers」テーブルの「BEFORE INSERT」フェーズに接続します。\n行ごとの計算「FOR EACH ROW」を強制し、「force_uppercase_name()」関数の実行を呼び出します。\n注: UDF「force_uppercase_name」も再作成します (環境が分離されているため)。コードの先頭にトリガー宣言を追加します。

エディターを読み込み中…
ヒントを表示

テキスト構文: 最初に関数を作成し、次に CREATE TRIGGER trg_force_uppercase BEFORE INSERT ON Customers FOR EACH ROW EXECUTE FUNCTION Force_uppercase_name(); を追加します。

3 回の試行後に解決策が利用可能になります

運動#sql.m12.l4.e2
試行回数: 0読み込み中…

センサーを殺せ!ノイズの多い監査をバイパスして、生のシード ファイルや一時的なネイティブ変更をプッシュしたい場合があります。\nトリガーの削除は非常に簡単です (有機関数は削除せず、センサー バインディングのみを削除します)。\n「DROP TRIGGER」キーワードを使用して、名前とグローバル アタッチメントを指定します。

エディターを読み込み中…
ヒントを表示

どこからのものかを忘れずに指定してください。 DROP TRIGGER trg_force_uppercase ON の顧客。

3 回の試行後に解決策が利用可能になります