MySQL にはトリガーのサポートが含まれています。トリガーは、テーブル操作に関連するデータベース オブジェクトです。トリガーが配置されているテーブルで指定されたイベントが発生すると、オブジェクトが呼び出されます。つまり、テーブルの操作イベントがテーブルでのトリガーの実行をトリガーします。
トリガーを作成する
MySQL では、トリガーを作成するための構文は次のとおりです:
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt
その中に:
trigger_name: ユーザーが指定したトリガー名を識別します。
trigger_time: トリガー時間を識別します。前または
AFTER;
trigger_event: トリガー イベントを識別します。値は INSERT、UPDATE、または
DELETE;
tbl_name: トリガーを作成するテーブル名、つまりトリガーが作成されるテーブルを識別します。
trigger_stmt: トリガー プログラム本体 (SQL ステートメント、または使用可能)
BEGIN と END には複数のステートメントが含まれます。
6 種類のトリガー、つまり BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER を作成できることがわかります。 削除後に更新してください。
もう 1 つの制限は、テーブル上に同じタイプの 2 つのトリガーを同時に作成できないことです。そのため、テーブル上に作成できるトリガーは最大 6 つです。
trigger_eventの詳細説明
INSERT、UPDATE、DELETEを除くMySQL
基本的な操作の定義に加えて、LOAD DATA ステートメントと REPLACE ステートメントも定義されており、これらにより上記の 6 種類のトリガーをトリガーすることもできます。
LOAD DATA ステートメントは、ファイルをデータテーブルにロードするために使用されます。これは、一連の INSERT 操作と同等です。
REPLACE ステートメントは一般的に INSERT ステートメントと非常によく似ていますが、テーブルに主キーまたは一意のインデックスがある場合、挿入されたデータが元のデータと異なる場合が異なります。 主キーまたは一意のインデックスが一致している場合、最初に元のデータが削除され、その後新しいデータが追加されます。つまり、REPLACE ステートメントは 1 つと同等である場合があります。
INSERT ステートメントは、DELETE ステートメントに INSERT ステートメントを加えたものと同等になる場合があります。
INSERT タイプのトリガー: トリガーは行が挿入されるときにアクティブ化され、INSERT、LOAD DATA、および REPLACE ステートメントによってトリガーされる場合があります。
タイプ・トリガー: トリガーは、特定の行が変更されたときにアクティブ化され、UPDATE ステートメントによってトリガーされる可能性があります。
DELETE タイプ・トリガー: トリガーは、特定の行が削除されたときにアクティブ化されます。
DELETE および REPLACE ステートメントがトリガーされます。
MySQL では、BEGIN … END ステートメントの構文は次のとおりです:
[statement_list]
END
そのうち、statement_list
1 つ以上のステートメントのリストを表します。リスト内の各ステートメントはセミコロン (;) で終了する必要があります。
MySQL では、セミコロンはステートメントの終わりの識別子です。セミコロンに遭遇すると、ステートメントが終了し、MySQL が実行を開始できることを意味します。したがって、インタプリタはstatement_listに遭遇します。
実行は のセミコロンの後に開始され、BEGIN に一致する END が見つからないため、エラーが報告されます。
new_delimiter
1 つ以上の長さの記号を設定できます。デフォルトはセミコロン (;) で、$:
DELIMITER などの他の記号に変更できます。
$
これ以降のステートメントはセミコロンで終了し、インタープリターは $ が出現した場合にのみ、ステートメントが終了したとみなされます。使用後は、忘れずに変更して戻す必要があることに注意してください。
トリガー作成の完全な例
クラス テーブル class(クラス番号 classID、クラス内の生徒数 stuCount)
Student テーブル
Student(学生番号 stuID, クラス番号 classID)
学生が追加されたときにクラス テーブルの学生数を自動的に更新するトリガーを作成するには、コードは次のとおりです。
DELIMITER $ create trigger tri_stuInsert after insert on student for each row begin declare c int; set c = (select stuCount from class where classID=new.classID); update class set stuCount = c + 1 where classID = new.classID; end$ DELIMITER ;
DECLARE var_name[,...] type [DEFAULT value]
var_name は SQL と同じ変数名です。 ステートメントは同じであり、変数名は大文字と小文字が区別されません。型は MySQL でサポートされる任意のデータ型です。同じ型の複数の変数をカンマで区切って同時に定義できます。必要に応じて、使用できます DEFAULT 句は、式として指定できるデフォルト値を提供します。
変数の割り当てには SET ステートメントを使用します。構文は次のとおりです:
SET var_name = expr [,var_name = expr] ...
NEW と OLD の詳細な説明
上記の例では NEW キーワードが使用されており、 MS SQL Server の INSERTED と DELETED は、MySQL で定義されるものと似ています。 古い、を表すために使用されます
トリガーが配置されているテーブル内の、トリガーをトリガーしたデータの行。
具体的には:
INSERT タイプのトリガーでは、NEW
(BEFORE) 挿入される新しいデータ、または (AFTER) 挿入された新しいデータを表すために使用されます。 UPDATE タイプのトリガーでは、OLD は変更される、または変更された元のデータを表すために使用されます。
変更される、または変更された新しいデータを表すために使用されます。
DELETE タイプのトリガーでは、削除される、または削除された元のデータを表すために使用されます。
NEW.columnName (columnNameは対応するデータテーブルの列名です)
さらに、OLDは読み取り専用ですが、NEWはトリガーでSETを使用できます
トリガーが再びトリガーされて循環呼び出しが発生しないように、値を割り当てます (たとえば、学生を挿入する前に、学生番号の前に「2013」を追加します)。
トリガーの表示
は、データベースの表示 (show Databases;) およびテーブルの表示 (show tables;) と同じです。 トリガーの表示の構文は次のとおりです:
SHOW TRIGGERS [FROM schema_name];
ここで、schema_name は次のとおりです。 MySQL のスキーマの名前 スキーマとデータベースは同じです。つまり、データベース名を指定できるため、最初に「USE database_name;」を行う必要はありません。
トリガーの削除
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
トリガーの実行順序
作成したデータベースこれは通常 InnoDB データベースであり、その上に作成されたテーブルはトランザクション テーブル、つまりトランザクション セーフです。このとき、SQL ステートメントまたはトリガーの実行に失敗すると、MySQL トランザクションは以下を含めてロールバックされます:
① BEFORE トリガーの実行に失敗した場合、SQL は正しく実行できません。
③アフター タイプのトリガーの実行に失敗すると、SQL はロールバックされます。
皆さん、mysql トリガーの使用についてはある程度理解できましたか? ご質問があれば、メッセージを残してください。一緒に進歩していきます。