创建触发器:
CREATETRIGGERtrigger_name
trigger_time
trigger_eventONtbl_name
FOREACH ROW
trigger_stmt
trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。
INSERT触发器
INSERT触发器可以使用NEW.列名 读取插入的新值,也可以修改它。
UPDATE触发器
可以使用 NEW.列名 获取新值,也可以使用 OLD.列名 获取旧值。
DELETE触发器
可以使用 OLD.列名 获取旧表中的值(只读)。
用处:
在BEFORE触发器中进行一些数据的校验工作(大小写、数据类型、格式等)
在AFTER触发器中进行一些后续的统计工作(行数、总数、平均值等)
1. 插入数据:
DELIMITER $
CREATE TRIGGER tr_insert_zcarticlebody AFTER INSERT ON zcarticlebody FOR EACH ROW
BEGIN
-- 插入目标表
INSERT INTO
china_dev.cb_article_body(id,page_titles,body_text,copy_image_flag)
VALUES
(new.ID,new.PageTitles,new.BodyText,new.CopyImageFlag);
END;
$
DELIMITER;
tr_insert_zcarticlebody :触发器名称;
zcarticlebody :建立触发器的表名;
chinabim_dev :数据库名称;
cb_article_body :触发的表名,即目标表名;
2. 更改数据:
DELIMITER $
CREATE TRIGGER tr_update_zcarticlebody AFTER UPDATE ON zcarticlebody FOR EACH ROW
BEGIN
UPDATE china_dev.cb_article_body
SET page_titles = new.PageTitles,body_text = new.BodyText,copy_image_flag = new.CopyImageFlag
WHERE id = new.ID;
END
$
DELIMITER;
tr_insert_zcarticlebody :触发器名称;
zcarticlebody :建立触发器的表名;
chinabim_dev :数据库名称;
cb_article_body :触发的表名,即目标表名;
3. 删除数据:
DELIMITER $
CREATE TRIGGER tr_del_zcarticlebody AFTER DELETE ON zcarticlebody FOR EACH ROW
BEGIN
-- INSE
DELETE FROM china_dev.cb_article_body WHERE id = old.ID;
END
$
DELIMITER ;
COMMIT;
tr_insert_zcarticlebody :触发器名称;
zcarticlebody :建立触发器的表名;
chinabim_dev :数据库名称;
cb_article_body :触发的表名,即目标表名;
Navicat for MySQL