触发器是由事件来触发某个操作
事件: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等