MySQL触发器的使用

1、触发器的基本语法

#创建触发器
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件   #触发事件为insert,update,delete
ON 表名 FOR EACH ROW      #FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器
BEGIN
    执行语句列表
END

#删除触发器
drop trigger 触发器名

当触发器不使用时,一定要删除!数据量大的时候影响效率。

2、查看触发器

#查看触发器
#第一种
select triggers  #查看所有触发器
#第二种
SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='触发器名';

tips:所有触发器信息都存储在information_schema数据库下的triggers表中,可以使用SELECT语句查询,如果触发器信息过多,最好通过TRIGGER_NAME字段指定查询。

#在BEGIN...END语句中也可以定义变量,但是只能在BEGIN...END内部使用:
DECLARE var_name var_type [DEFAULT value] #定义变量,可指定默认值
SET var_name = value  #给变量赋值

3、默认的MySQL语句分隔符为 ;(正如你已经在迄今为止所使用的MySQL语句中所看到的那样)。mysql命令行实用程序也使用;作为语句分隔符。如果命令行实用程序要解释存储过程自身内的 ; 字符,则它们最终不会成为存储过程的成分,这会使存储过程中的SQL出现句法错误。

解决办法是临时改变改命令行实用程序的语句分隔符 delimiter //

DELIMITER // 告诉命令行实用程序使用 // 作为新的语句结束分隔符,可以看到标志存储过程结束的END定义为END // 而不是END ; 。最后,为恢复为原来的语句分隔符,可使用DELIMITER  ; 。除\符号外,任何字符都可以用作语句分隔符。

4、举例,在user表中插入一条数据后,在日志中更新一条数据。

CREATE TABLE `log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `log` varchar(255) DEFAULT NULL COMMENT '日志说明',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='日志表';

DELIMITER $  #换结束命令符
create trigger user_log after insert on user 
for each row 
BEGIN
DECLARE s1 VARCHAR(40) ;
DECLARE s2 VARCHAR(20) ;
SET s2 =  "is insert";
SET s1 = CONCAT(NEW.name,s2);     
INSERT INTO log(log) values(s1);
END $
DELIMITER ;

show triggers  #查看触发器

insert into user(name,age,password) VALUES('小明',18,'123');  #插入数据

deop trigger user_log  #删除触发器

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值