一、触发器

触发器是由事件来出发某个动作。这些事件包括insert语句、update语句和delete语句。

当数据库系统执行这些事件时,就会激活触发器执行相应得动作。

触发器是有insert、update、delete等事件来触发某种特定动作。满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。

这样做可以保证某些操作之间的一致性.

1、创建只有一个执行语句的触发器

语法格式:

         create trigger 触发器名 before|after 触发事件

         on 表名 for each row 执行语句

触发器名参数指要创建的触发器的名字;

before和after参数指定了触发器执行的时间;

   before指在触发事件之前执行触发语句;

   after指在触发事件之后执行触发语句;

触发事件指触发的条件,其中包括insert、update、delete;

表名指触发事件操作的表的名称;

for each row表示任何一条记录上的操作满足触发条件都会触发该触发器;

执行语句指触发器被触发后执行的程序;

举例:

create trigger dept_trig1 before insert

on department for each row

inert into trigger_time values(now());

注释:当向department表中执行insert操作时,数据库系统都会在insert语句执行之前向trigger_time表中插入当前时间;

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

语法格式:

         create trigger 触发器名 before|after 触发事件

         on 表名 for each row 

         begin

                执行语句列表

         end

执行语句列表表示需要执行的多个执行语句的内容,不同执行语句之间用分好隔开;

注意:

一般情况下,MYSQL默认的是以“;”作为结束执行语句。在创建触发器的过程中,需要用到“;”为了解决这个问题可以用delimiter语句

如“delimiter &&”可以将结束符号变为“&&”。当触发器创建完成之后,可以用命令“delimiter ;”来将结束符号变为“;”。

举例:

delimiter &&

create trigger dept_trig2 aftrer delete

on department for each row

begin
insert into trigger_time values('21:01:01');
insert into trigger_time values('22:01:01');
end && delimiter; 注意:在MYSQL中,一个表在相同的触发时间,只能创建一个触发器; 3、查看触发器 (1)show triggers语句查看触发器信息 语法格式:show triggers; 注释:其结果显示了所有触发器的基本信息,但是该语句无法查询指定的触发器信息,只能查询所有的触发器信息,适合触发器较少时使用 (2)在triggers表中查看触发器信息 在MYSQL中,所有触发器的定义都存储在information_schema数据库下的triggers表中, 查询triggers表,可以查看到数据库中所有触发器的详细信息; 语法格式:select * from information_schema.triggers; 同时该方法可以查询指定触发器的详细信息。 语法格式:select * from information_schema.triggers where trigger_name='触发器名'; 4、触发器的使用 before在触发事件之前执行,after在触发事件之后执行; 注意:触发器中不能包含start transaction、commit或者rollback等关键词,也不能包含call语句。 5、删除触发器 语法格式:drop trigger 触发器名; ======================================================

create trigger 触发器名 before| after 触发事件
on 表名 for each row

执行语句;

delimiter &&
create trigger 触发器名 before| after 触发事件
on 表名 for each row
begin
执行语句列表
end
&&
delimiter;

触发事件是指触发条件,包括insert、update、delete;

表名指触发事件操作的表的名称;

=====================================================================================================================
=====================================================================================================================

create table employee ( num int(50),
d_id int(50),
name varchar(50),
age int(50),
sex varchar(50),
homeadd varchar(50)
);

insert into employee values(1,1001,'zhangsan',26,'nan','beijing');
insert into employee values(2,1001,'lisi',24,'nv','hunan');
insert into employee values(3,1002,'wangwu',25,'nan','jiangsu');
insert into employee values(4,1004,'aric',15,'nan','yingguo');

select * from employee;

create table department ( d_id int(50),
d_name varchar(50),
functione varchar(50),
address varchar(50)
);

insert into department values(1001,'keyanbu','yanfachanpin','3lou5hao');
insert into department values(1002,'shengchanbu','shengchanchanp','5louyiceng');
insert into department values(1003,'xiaoshoubu','cehuaxiaoshou','1louxiaoshoudating');

select * from department;

==========================================================================================

select * from employee;

select * from department;

==========================================================================================

create table trigger_time ( exec_time varchar(50)
);

select now();

create trigger dept_trig1 before insert on department for each row insert into trigger_time values ( now() );

delete from department where d_id = 1003;

select * from department;

select * from trigger_time;

insert into department values(1003,'xiaoshoubu','cehuaxiaoshou','1louxiaoshoudating');

select * from trigger_time;

=================================================================================================================

select * from employee;

select * from department;

create table trigger_time1 ( exec_time varchar(50)
);

select now();

select * from trigger_time1;

delimiter &&
create trigger dept_trig2 after delete on department for each row
begin
insert into trigger_time1 values ( now() );
insert into trigger_time1 values ( now() );
end
&&
delimiter;

select * from trigger_time1;

delete from department where d_id = 1003;

select * from trigger_time1;

=================================================================================

=================================================================================
查看触发器

1、查看数据库中所有触发器的信息:

show triggers;

2、在triggers表中查看触发器信息

mysql中所有触发器的定义都存在information_schema数据库下的triggers表中,查询triggers表,可以查询数据库中所有触发器的详细信息

select * from information_schema.triggers; /*查询所有*/

select * from information_schema.triggers where trigger_name = 'dept_trig1'; /*单个指定查询*/

注意:在激活触发器时,对触发器中的执行语句存在一些限制。而且触发器有问题,会阻止程序向下执行,而且数据不能回滚。

3、删除触发器

drop trigger 触发器名;

select * from information_schema.triggers;

drop trigger dept_trig1;

drop trigger dept_trig2;

================================================================================================================================


mysql——触发器——前期整理笔记00的更多相关文章

  1. mysql——前面内容——前期整理笔记00

    ), sname ), sage ), ssex ) ); ','zhaolei','1990-01-01','nan'); ','qiandian','1990-12-21','nan'); ',' ...

  2. Oracle和Mysql语法异同整理笔记

    目录 (1) 模糊匹配 (2) 删除数据 (3) 时间函数 (4) 关键字问题 (5) 递归查询 (6) 排序问题 (7) 空值返回0 (8) 取最大值 (9) 列转换函数 (10) 类型转行函数 @ ...

  3. 《MySQL 基础课程》笔记整理(进阶篇)(未完)

    一.MySQL服务安装及命令使用 安装过程就不写了,毕竟百度经验一大把 MySQL 官方文档 MySQL 参考手册中文版 1.MySQL简介 ​ RDBMS(Relational Database M ...

  4. MYSQL进阶学习笔记七:MySQL触发器的创建,应用及管理!(视频序号:进阶_16,17)

    知识点八:MySQL触发器的应用(16,17) 触发器的定义: 什么是触发器: 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据是触发执行,他比数据库本身标准的功能有更精细和更复杂的数据 ...

  5. 【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)

    1   引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...

  6. mysql触发器的例子--插入前更新数据

    本文介绍下,一个mysql触发器的例子,在数据插入前更新相关内容,有需要的朋友参考下. mysql触发器的例子,如下: view source print? 001 mysql> CREATE  ...

  7. MYSQL视图的学习笔记

    MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具   1.       视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...

  8. mySQl数据库的学习笔记

    mySQl数据库的学习笔记... ------------------ Dos命令--先在记事本中写.然后再粘贴到Dos中去 -------------------------------- mySQ ...

  9. 利用MySQL触发器实现check和assertion

    MySQL虽然输入check语句不会报错,但是实际上并没有check的功能.但是MySQL 依然可以利用触发器来实现相应功能. 本文将根据两个例子简要阐述MySQL实现check和assertion的 ...

随机推荐

  1. shell中条件判断if中的-z到-d

    shell中条件判断if中的-z到-d的意思 [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真.[ -c FILE ] 如果 ...

  2. electron-vue 引入 vue.ant.design报错

    ERROR in ./node_modules/ant-design-vue/dist/antd.less (./node_modules/css-loader!./node_modules/less ...

  3. Python之基于十六进制判断文件类型

    核心代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : suk import struct from io import Byt ...

  4. docker-compose容器互相连接

    一些示例未整理 haproxy 与nginx 容器连接 ## 服务的compose 编写 mkdir /mnt/compose vim docker-compose.yml web1: image: ...

  5. Java中 DecimalFormat 用法详解

    我们经常要将数字进行格式化,比如取2位小数,这是最常见的.Java 提供DecimalFormat类,帮你用最快的速度将数字格式化为你需要的样子.下面是一个例子: import java.text.D ...

  6. android 小音频频繁播放

    android中多媒体文件(音乐和视频)的播放是用MediaPlayer方式是大家比较熟悉的,但是现在要来说一下另外一种音乐文件播放的方式SoundPool,相比较而言,用MediaPlayer来播放 ...

  7. 我不熟悉的string类

    我不常用的string函数 多的不说,直接上: assign函数 string& assign(const char *s); //把字符串s赋给当前的字符串 string& assi ...

  8. A.Equivalent Prefixes(ST算法)

    Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 ...

  9. Nginx配置记录【例1】

    A服务器,例: [root@localhost conf.d]# egrep -v "^#|^$" /etc/nginx/nginx.conf user nginx; worker ...

  10. 翻译 | 上手 Webpack ? 这篇就够了!

    译者:小 boy (沪江前端开发工程师) 本文原创,转载请注明作者及出处. 原文地址:https://www.smashingmagazine.com/2017/02/a-detailed-intro ...