ホームページ  >  記事  >  データベース  >  MySQLのトリガーの構文は何ですか

MySQLのトリガーの構文は何ですか

WBOY
WBOY転載
2023-05-28 23:17:351956ブラウズ

1. 定義:

MySQL に埋め込まれたプログラムにはトリガーとストアド プロシージャが含まれており、どちらも類似点があります。トリガーとは、イベントによってトリガーされるアクションです。データベースがこれらのイベントを実行すると、トリガーがアクティブ化され、対応するアクションが実行されます。 MySQL では、トリガー条件には UPDATE、INSERT、および DELETE 操作が含まれます。

  • MySQL では、現在、UPDATE、INSERT、および DELETE のみがトリガーをトリガーし、他の操作はトリガーをサポートしていません。これは Oracle のトリガーとは大きく異なるため、区別に注意してください。

  • トリガーの各テーブルの各イベントに対して許可されるトリガーは 1 つだけです。したがって、テーブル値ごとに最大 6 つのトリガーが許可されます。テーブルで 2 つのイベント (INSERT と DELETE) をトリガーする必要がある場合は、それぞれ 2 つのトリガーを作成する必要があります。

  • テーブルのみがトリガーをサポートし、ビューと一時テーブルはサポートしません。

2. 構文:

CREATE TRIGGER TRIGGER_NAME
BEFORE/AFTER 
UPDATE/INSERT/DELETE ON TABLE_NAME 
FOR EACH ROW
#触发器主体
[BEGIN]
SQL操作
[END];
  • トリガーの作成: CREATE ステートメントを使用してストアド プロシージャを作成するのと同じですが、注意してください、ここにはOR REPLACEはありません。

  • TRIGGER_NAME: トリガー名。 MySQL では、各テーブルのトリガーが一意であることを確認する必要がありますが、各データベースのトリガーは一意ではない可能性があるため、データベース内の 2 つのテーブルが同じトリガーを持つ可能性があります。この動作は他のデータベースでは許可されません。フォーマットの一貫性を維持するには、TRIGGER_NAME を可能な限り一意にする必要があります。

  • BEFORE/AFTER: トリガーが作動する瞬間。イベントが発生する前にトリガーを実行する場合は「BEFORE」を使用し、イベントが発生した後にトリガーを実行する場合は「AFTER」を使用します。

  • 操作: UPDATE/INSERT/DELETE は、対応するイベントと条件をトリガーします。 MySQL では、これら 3 つの DDL 操作のみがトリガーをサポートでき、他の操作はサポートされません。

  • 各行: トリガー イベントの影響を受ける各行は、トリガー アクションをアクティブにする必要があります。 MySQL では、行トリガーは FOE EACH ROW を省略できず、ステートメント トリガーがサポートされていないことを意味します。

  • トリガー本体: 単一の SQL ステートメント、または BEGIN...END で構成される複雑な構造ブロックのいずれかです。

# 创建一个触发器T1,在对表customer做插入操作时,就会触发T1,之后会在日志表note中插入一条数据
CREATE TRIGGER T1
AFTER 
INSERT ON customer
FOR EACH ROW # 触发器主体
INSERT INTO note(日期,目标,操作) VALUES(NOW(),'customer','insert');

3. トリガーの削除

テーブルやストアド プロシージャの削除と同様に、トリガーの削除には DROP ステートメントを使用します。

#删除触发器T1
DROP TRIGGER IF EXISTS T1;

トリガーは更新および変更できません。トリガーの内容を変更したい場合は、まずトリガーを削除してから、新しいトリガーを作成する必要があります。

4. クエリ トリガー

#在已知数据库内,查询触发器
SHOW TRIGGERS;
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '触发器名'
#查询所有的触发器
SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '数据库名')

5. トリガー タイプ OLD および NEW の使用

トリガーは DDL 操作の前後にトリガーされ、常にターゲット テーブルに対して実行されます。特定の変更が行われた場合、ターゲット テーブルの変更前後の値を知る必要がある場合があり、そのために OLD と NEW を使用する必要があります。

名前が示すように、OLD は変更前の値、つまり UPDATE 前の値、または DELETE される値、または DELETE された値です。

そして NEW は UPDATE 後の新しい値であり、INSERT されようとしている値、または INSERT された値です。

MySQLのトリガーの構文は何ですか

具体例:

#创建customer表
CREATE TABLE `customer` 
(`CUST_ID` int(11) NOT NULL AUTO_INCREMENT,
`CUST_NAME` varchar(10) NOT NULL,
`CUST_TEL` varchar(10) DEFAULT NULL,
PRIMARY KEY (`CUST_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#向表中插入数据

#创建一个update触发器
CREATE TRIGGER T2
AFTER 
UPDATE ON customer
FOR EACH ROW 
#old和new的使用方法:old.columnname/new.columnname(列名)
#将更新前后的值,赋值给两个变量
SELECT OLD.CUST_ID,NEW.CUST_ID INTO @OLD_ID,@NEW_ID;

#触发触发器T2
UPDATE customer SET CUST_ID = '10000' WHERE CUST_NAME = 'AAA';

#查询OLD和NEW
SELECT @OLD_ID,@NEW_ID;

以上がMySQLのトリガーの構文は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。