-- --------------------------------------------------------
-- ######触发器##
-- ---------------------------------------------------------
/*
OLD 代表触发器外执行对应操作,对应的原代码中要变更或是要删除的数据! 常用于删和改 (drop和update)
*/
/*
现在有两个表【用户表】和【日志表】,当一个用户被创建的时候,就需要在日志表中插入创建的log日志,
如果在不使用触发器的情况下,你需要编写程序语言逻辑才能实现,
但是如果你定义了一个触发器,触发器的作用就是当你在用户表中插入一条数据的之后帮你在日志表中插入一条日志信息。
当然触发器并不是只能进行插入操作,还能执行修改,删除。
*/
-- 创建测试数据表
-- ######触发器##
-- ---------------------------------------------------------
/*
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt
trigger_name:触发器的名称
tirgger_time:触发时机,为BEFORE或者AFTER
trigger_event:触发事件,为INSERT、DELETE或者UPDATE
tb_name:表示建立触发器的表明,就是在哪张表上建立触发器
trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句
MySQL创建以下六种触发器:
BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE
AFTER INSERT,AFTER DELETE,AFTER UPDATE
NEW 代表触发器外执行对应操作,新插入代码中的数据! 常用于 insert into 插入新数据,new 获取要插入的内容
OLD 代表触发器外执行对应操作,对应的原代码中要变更或是要删除的数据! 常用于删和改 (drop和update)
*/
/*
现在有两个表【用户表】和【日志表】,当一个用户被创建的时候,就需要在日志表中插入创建的log日志,
如果在不使用触发器的情况下,你需要编写程序语言逻辑才能实现,
但是如果你定义了一个触发器,触发器的作用就是当你在用户表中插入一条数据的之后帮你在日志表中插入一条日志信息。
当然触发器并不是只能进行插入操作,还能执行修改,删除。
*/
-- 创建测试数据表
CREATE TABLE `cf_users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`strname` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
`addtime` varchar(255) DEFAULT '2000-1-1 00:00:00',
PRIMARY KEY (`id`),
KEY `strname` (`strname`(250)) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1;
CREATE TABLE `cf_logs` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`strlog` varchar(255) DEFAULT NULL COMMENT '日志说明',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日志表';
-- 创建触发器,插入数据前写日志
CREATE TRIGGER user_log AFTER INSERT ON cf_users FOR EACH ROW
BEGIN
DECLARE s1 VARCHAR(225) CHARACTER SET utf8;
DECLARE s2 VARCHAR(225) CHARACTER SET utf8;
SET s2= "插入数据前触发写日志";
SET s1= CONCAT(NEW.strname,S2); #函数CONCAT可以将字符串连接
INSERT INTO cf_logs(strlog) VALUES(s1);
END
-- 查看触发器
SHOW TRIGGERS;
-- 插入数据
INSERT INTO cf_users(strname,addtime) VALUES('周伯通',NOW());
-- 查看结果
SELECT * FROM cf_logs;
SELECT * FROM cf_users;
-- 删除触发器
DROP TRIGGER user_log;