MySQLでトリガーを作成する方法

MySQLでトリガーを作成する方法

この記事の例では、参考のためにMySQLトリガーを作成するための具体的なコードを共有しています。具体的な内容は次のとおりです。

例を見てみましょう:

#テーブルを作成します。DROP TABLE IF EXISTS t_attendance;
テーブル t_attendance を作成します (
 job_no VARCHAR(30) デフォルト ''
 操作時間 VARCHAR(20) デフォルト ''
 インデックスindex_operateTime(operateTime)、
 INDEX index_jobNo(ジョブ番号)
) エンジン=INNODB デフォルト文字セット=utf8


#トリガーを作成する DELIMITER $
挿入後にトリガー t_afterinsert_on_doorlog を作成する 
t_doorlogの各行 
始める
 jobno VARCHAR(30)を宣言します。
 time1 VARCHAR(20)を宣言します。
 SET jobno = (SELECT job_num FROM tb_park_user_base WHERE card_num = new.cardNo);
 time1 = DATE_FORMAT(new.operateTime,'%Y%m%d%H%i%s') を設定します。
 t_attendance (job_no, operatime) に挿入します。 
 価値観
  (ジョブ番号、時間1);
終了$

分析例:

まず、トリガーに格納するテーブルt_attendanceを作成します。

DELIMITER $ は、次の文が "$" で終了することを MySQL に伝えることを意味します。この文がないと、次の文は失敗し、MySQL はどの文が終了するかを判断できません。

CREATE TRIGGER t_afterinsert_on_doorlog AFTER INSERT ON t_doorlog FOR EACH ROW トリガーを作成するための構文: AFTER には同じレベルのキーワードとして BEFORE があり、INSERT には同じレベルのキーワードとして DELETE と UPDATE があります。

DECLARE jobno VARCHAR(30)はトリガーSQLでローカル変数を宣言することを意味します。

SET jobno=.... は、ローカル変数に値を割り当てることを意味します。= の右側には、クエリ ステートメントまたは関数メソッドを指定できます。

補足トリガー:

トリガーは、特定のテーブル内のデータが挿入、削除、または変更されたときに実行される特別なストアド プロシージャです。データベース自体の標準機能よりも高度で複雑なデータ制御機能を備えています。

データベース トリガーには次の機能があります。

1. セキュリティ。データベースの値に基づいて、ユーザーにデータベースを操作するための特定の権限を与えることができます。

# 時間に基づいてユーザー操作を制限できます。たとえば、仕事が終わった後や休日にはデータベースのデータを変更できません。

# データベース内のデータに基づいて、株価が一度に 10% 以上上昇しないようにするなど、ユーザー操作を制限できます。

2. 監査。データベース上のユーザー操作を追跡できます。

# ユーザーがデータベースを操作するために使用する監査ステートメント。

# ユーザーによるデータベースの更新を監査テーブルに書き込みます。

3. 複雑なデータ整合性ルールを実装する

# 非標準のデータ整合性チェックと制約を実装します。トリガーはルールよりも複雑な制限を作成できます。ルールとは異なり、トリガーは列またはデータベース オブジェクトを参照できます。たとえば、トリガーにより、マージンを超える先物取引の試みが取り消される可能性があります。

# 変更可能なデフォルト値を提供します。

4. 複雑で非標準のデータベース関連の整合性ルールを実装します。トリガーは、データベース内の関連テーブルに対して連続更新を実行できます。たとえば、auths テーブルの author_code 列の削除トリガーにより、他のテーブル内の一致する行が削除される可能性があります。

# 変更または削除する場合、他のテーブル内の一致する行もカスケード変更または削除します。

# 変更または削除する場合、他のテーブル内の一致する行を NULL 値に設定します。

# 変更または削除する場合、他のテーブル内の一致する行をカスケードでデフォルト値に設定します。

# トリガーは、関連する整合性を破壊する変更を拒否またはロールバックし、データを更新しようとするトランザクションをキャンセルできます。このトリガーは、主キーと一致しない外部キーが挿入されたときにトリガーされます。たとえば、books.author_code 列に挿入トリガーを作成して、新しい値が auths.author_code 列の値と一致しない場合は挿入がロールバックされるようにすることができます。

5. テーブル内のデータをリアルタイムで同期的にコピーします。

6. データ値を自動的に計算し、データ値が特定の要件に達した場合は特定の処理を実行します。例えば、会社の口座の資金が50,000元未満の場合、警告データがすぐに財務担当者に送信されます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLトリガーの使用法の詳細な説明
  • MySQLトリガーの簡単な概要と例
  • MYSQL でトリガー権限を設定する問題を解決する方法
  • 2つのテーブル間でデータを同期するためのmysqlトリガー
  • MySQLトリガーの概念、原理、使用法の詳細な説明
  • MySQL トリガーとストアド プロシージャをテストする方法
  • MySQL はトリガーでレコードの挿入または更新を中断しますか?
  • MySQL のトリガーの簡単な紹介と使用例
  • トリガーの適用に関する MySQL の注意事項
  • MySQL トリガーの使用シナリオとメソッドの例

<<:  JavaScriptは組み込みオブジェクトのプロトタイプメソッド実装を追加します

>>:  Ubuntu にグラフィック ドライバーが正常にインストールされたかどうかを確認する方法

推薦する

Vueモバイル端末の適応化問題の詳細説明

1. vue uiでプロジェクトを作成する 2. 基本設定項目を選択する 3. プロジェクトを実行す...

JavaScript関数の詳細な説明これを指す問題

目次1.関数内のこの方向1. 通常の機能2. コンストラクター3. オブジェクトメソッド4. イベン...

JavaScript のドキュメント オブジェクト モデル (DOM)

目次1. DOMとは何か2. 要素を選択する3. getElementById() 4. クエリセレ...

波効果を作成するための CSS のトリック

純粋な CSS を使用して波の効果を実現することは、常に非常に困難でした。 波形曲線を実現するにはベ...

MySQL MGR 構築時の一般的な問題と解決策

目次01 よくある故障 1 02 よくある欠陥 2 03 よくある欠陥 3 04 よくある欠陥 4 ...

MySQL サブクエリ (ネストされたクエリ)、結合テーブル、複合クエリの詳細な説明

1. サブクエリMySQL 4.1以降はサブクエリをサポートしていますサブクエリ:別のクエリ内にネス...

Linux trコマンドの使い方

01. コマンドの概要tr コマンドは、標準入力からの文字を置換、圧縮、削除できます。ある文字セット...

nginx で HSTS を有効にしてブラウザを HTTPS アクセスにリダイレクトする方法の詳細な説明

前回の記事では、https を使用したローカルノードサービスアクセスを実装しました。前回の記事の効果...

HTML doctype の役割の紹介

ドキュメント モードには次の 2 つの機能があります。 1. HTML文書を解析するためにどのHTM...

xshell を使用して VMware で Linux に接続する方法 (2 つの方法)

【序文】最近、ITOO の試験システムのストレステストを行いたいので、自分のコンピュータに Lin...

ふるい抽選を実施するミニプログラム

この記事の例では、ふるい抽選を実装するためのミニプログラムの具体的なコードを参考までに共有しています...

Linux の操作とメンテナンスの基本的なスワップ パーティションと LVM 管理のチュートリアル

目次1. スワップパーティション SWAP 1.1 スワップファイルを作成する1.2 スワップパーテ...

小規模プログラムへのデータキャッシュ機構の応用と実装

ミニプログラムデータキャッシュ関連知識データ キャッシュ: データをキャッシュして、アプレットを終了...

シンプルなログインページを実装するための HTML+jQuery

目次導入公開コード(バックエンドインターフェース)例 1: 最もシンプル (純粋な HTML)コード...

ウェブサイトをより高く、よりデザイン的に見せる方法

「ウェブサイトを高級感のあるものにするにはどうすればいいでしょうか? それともデザイン重視にすればい...