MySQL に埋め込まれたプログラムにはトリガーとストアド プロシージャが含まれており、どちらも類似点があります。トリガーとは、イベントによってトリガーされるアクションです。データベースがこれらのイベントを実行すると、トリガーがアクティブ化され、対応するアクションが実行されます。 MySQL では、トリガー条件には UPDATE、INSERT、および DELETE 操作が含まれます。
MySQL では、現在、UPDATE、INSERT、および DELETE のみがトリガーをトリガーし、他の操作はトリガーをサポートしていません。これは Oracle のトリガーとは大きく異なるため、区別に注意してください。
トリガーの各テーブルの各イベントに対して許可されるトリガーは 1 つだけです。したがって、テーブル値ごとに最大 6 つのトリガーが許可されます。テーブルで 2 つのイベント (INSERT と DELETE) をトリガーする必要がある場合は、それぞれ 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');
テーブルやストアド プロシージャの削除と同様に、トリガーの削除には DROP ステートメントを使用します。
#删除触发器T1 DROP TRIGGER IF EXISTS T1;
トリガーは更新および変更できません。トリガーの内容を変更したい場合は、まずトリガーを削除してから、新しいトリガーを作成する必要があります。
#在已知数据库内,查询触发器 SHOW TRIGGERS; SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '触发器名' #查询所有的触发器 SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '数据库名')
トリガーは DDL 操作の前後にトリガーされ、常にターゲット テーブルに対して実行されます。特定の変更が行われた場合、ターゲット テーブルの変更前後の値を知る必要がある場合があり、そのために OLD と NEW を使用する必要があります。
名前が示すように、OLD は変更前の値、つまり UPDATE 前の値、または DELETE される値、または DELETE された値です。
そして NEW は UPDATE 後の新しい値であり、INSERT されようとしている値、または INSERT された値です。
具体例:
#创建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 サイトの他の関連記事を参照してください。