Mysql 触发器

触发器是由事件来触发某个操作
事件:insert、update、delete等
准备工作:

import pymysql

db = pymysql.connect('localhost','root','111','db_1')
cursor = db.cursor()

一、创建触发器

   create trigger 触发器名称 before|after 触发事件
    on 表名 for each row 执行语句
    # before指的是触发事件之前执行触发语句
    # after指的是触发事件之后执行触发语句
    # for each row指的是在任一条记录上的操作满足触发事件都会触发该触发器

首先 创建一个名称为timelog的表

# 创建一个timelog表
sql1 = "create table log(\
        id int(11) primary key not null,\
        savetime varchar(50) not null);"
cursor.execute(sql1)

以下都是用Mysql语句执行的

其次 创建名称为auto_save2的触发器
在这里插入图片描述
biao表结构如下
在这里插入图片描述
为什么结尾都要加上//,是因为在该mysql状态下已经执行语句将结束符;改为了//
在这里插入图片描述

# delimiter // 表示更改结束符,默认结束符是;
# mysql中默认的语句结束符为‘;’而sql语句需要以分号结束

向biao表中插入一条记录,则log表中就会执行insert操作
在这里插入图片描述

二、创建具有多个执行语句的触发器

create trigger 触发器名称 before|after 触发事件
 on 表名 for each row 执行语句
 begin
 执行语句列表
 end
# begin end中间的多条语句需要用‘;’隔开

创建一个名称为tinfo的数据表
在这里插入图片描述
当执行delete语句时,delete会触发多个执行语句的触发器delete_info
在这里插入图片描述
此时,biao表中的记录
在这里插入图片描述
对biao表执行删除操作
在这里插入图片描述
查询log表和tinfo表
在这里插入图片描述
从以上两个表看出,触发器创建成功

注意:一个表在相同的时间和相同的触发事件只能创建一个触发器

三、查看触发器

在这里插入图片描述

show triggers语句只能查询所有触发器的内容,并不能查看指定触发器信息,该语句适用于在触发器数量较少的情况下应用

查看triggers表中的触发器信息
information_schema是MySQL中默认存在的库
在这里插入图片描述

如果指定查看某一个触发器,可以使用select * from information_schema.triggers where trigger_name='触发器名称';
一定要用单引号将触发器名字括起来

在这里插入图片描述
可以使用delimiter ; 将结束分隔符//改为;
在这里插入图片描述

四、使用触发器

注意:触发器中不能包含start transcation、commit和rollback等关键词也不能包含call语句
已经更新过的数据表时不能回滚的

触发器的使用:创建触发器然后向数据表中插入数据或者删除等能触发触发器的语句,然后查询记录触发器的信息的表即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、删除触发器

drop triggers 触发器名称
#在用完触发器之后,一定要删除触发器,否则在执行某些数据库操作的时候,会造成数据的变化

在这里插入图片描述
查看是否删除成功,使用show triggers
在这里插入图片描述

触发器的触发顺序:
before触发器、表操作、after触发器操作,其中表操作包括常用的数据库操作命令:insert、update、delete等
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值