1、触发器是由事件来触发某个操作,这些事件包括insert语句、update语句和delete语句。当数据库系统执行这些事件时,会激活触发器执行相应操作。MySQL从5.0.2开始支持触发器。使用触发器可以保证某些操作之间的一致性。

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

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

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

触发事件包括insert、update和delete;

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

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

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

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

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

一般情况下,MySQL默认以';'结束执行语句。在创建触发器过程中需要用到该符号。在执行语句列表也用';'分隔执行语句,因此可以用delimiter语句。

delimiter &&

create trigger dept_trig2 after 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中,一个表在相同触发时间的相同触发事件只能创建一个触发器。如触发事件insert,触发时间为after的触发器只有一个。

4、查看触发器

指查看数据库中已存在的触发器的定义、状态和语法等信息。查看方法包括show triggers语句和查询information_schema数据库下的triggers表等。

show triggers \G //查看所有的触发器,不适合触发器很多的情况

select * from information_schema.triggers;

select * from information_schema.triggers where trigger_name='触发器名';

5、MySQL中,触发器执行的顺序是before触发器、表操作(insert、update和delete)和after触发器

create trigger before_insert before insert on department for each row insert into trigger_test values(null, "before_insert");

create trigger after_insert before insert on department for each row insert into trigger_test values(null, "after_insert");

激活触发器时,对触发器的执行语句存在一些限制。如,触发器中不能包含start transaction、commit或rollback等关键词也不能包含call语句。

在触发器执行过程中,任何步骤出错都会阻止程序向下执行,对于普通表来说,已经更新过的记录不能回滚,更新后的数据将继续保留在表中。

6、删除触发器

drop trigger 触发器名。

触发器名参数如果指指定名称会在当前数据库下查找该触发器,如果找到就删除。如果指定数据库,数据库系统会到指定的数据库下去查找触发器。

如果不再需要某触发器,一定要将该触发器删除。

MySQL入门很简单-触发器的更多相关文章

  1. 《Mysql 入门很简单》(读后感①)

    下载完整版<Mysql 入门很简单>,点击这里~: http://files.cnblogs.com/files/zhengyeye/MySQL%E5%85%A5%E9%97%A8%E5% ...

  2. MySQL入门很简单: 7 触发器

    触发器是由事件来触发某个操作,这些事件包括INSERT语句,UPDATE语句和DELETE语句 1.创建触发器 1)创建只有一个执行语句的触发器 例子:再向department表中执行INSERT操作 ...

  3. MySQL入门很简单: 1 数据库概述

    1. 数据库概述 1.1 数据存储方式: 1)人工管理阶段 2)文件系统阶段: 文件系统通过文件的存储路径和文件名称访问文件中的数据 3)数据库系统阶段:Oracle, SQL Server, MyS ...

  4. MySQL入门很简单: 15 java访问MySQL数据库

    1. 连接数据库 1.1 下载安装驱动 java通过JDBC(Java Database Connectivity,Java数据库连接)来访问MySQL数据库.JDBC的编程接口提供的接口和类与MyS ...

  5. MySQL入门很简单: 14MySQL日志

    二进制日志: 以二进制文件的形式记录了数据库中的操作,但不记录查询语句 错误日志: 记录MySQL服务器的启动,关闭和运行错误等信息 通用查询日志: 记录用户登录和记录查询的信息 慢查询日志: 记录执 ...

  6. MySQL入门很简单: 13 数据备份和还原

    1. 数据备份 1)使用mysqldump命令备份 第一种:备份一个数据库 mysqldump -u username -p dbname table1 table2 ... > BackupN ...

  7. MySQL入门很简单: 12 MYSQL 用户管理

    1. 权限表 安装MySQL会自动安装一个名为mysql的数据库,存储权限表: user表, db表,host表,table_priv表,columns_priv表,proc_priv表等. 1)us ...

  8. MySQL入门很简单: 8查询数据

    1. 查询语句语法 SELECT 属性列表 FROM 表名和视图列表 [WHERE 条件表达式1] [GROUP BY 属性名1 [HAVING t条件表达式2]] [ORDER BY 属性名2 [A ...

  9. MySQL入门很简单: 6 视图

    1. 视图含义作用 视图是虚拟的表,是从数据率中一个或多个表中导出来的表:  数据库中只存放了视图的定义,没有存放视图中的数据,数据在原先的表中:  一旦表中的数据发生变化,显示在视图中的数据也会发生 ...

随机推荐

  1. vim编辑

    vim 重点在于光标的移动,模式的切换,删除,查找,替换,复制,黏贴,撤销命令的使用 vim的三种模式:命令模式(打开文件默认进入此模式)编辑模式(输入模式)末行模式(按:键进入,只能从命令模式下按键 ...

  2. ubantu 14.04中安装npm+node.js+react antd

    今天折腾了半天,各种安装问题,最终还是装上了: 1.安装npm $ sudo apt install npm 2.升级npm $ sudo npm install npm@latest -g 输入np ...

  3. 1038. Jewels And Stones

    描述 给定字符串J代表是珠宝的石头类型,而S代表你拥有的石头.S中的每个字符都是你拥有的一个石头. 你想知道你的石头有多少是珠宝. J中的字母一定不同,J和S中的字符都是字母. 字母区分大小写,因此& ...

  4. Python3基础-代码阅读系列—优惠码生成

    代码展示 import random # 生成200组长度为8的优惠码,字典集是数字加字母 def generate_key(number=200, length=8): char_set = &qu ...

  5. JavaScript基础笔记(十)表单脚本

    表单脚本 一.表单基础知识 JavaScript中表单对应的是HTMLFormElement类型,该类型继承自HTMLElement类型. 通过document.forms可以获得所有表单元素,通过数 ...

  6. 2108 ACM 向量积 凹凸

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2108 图一中,向量a × 向量 b    根据右手定则,得出向量c的方向.即为凸多边形. 图二中,若向量a ...

  7. LeetCode(976. 三角形的最大周长)

    问题描述 给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的.面积不为零的三角形的最大周长. 如果不能形成任何面积不为零的三角形,返回 0. 示例 1: 输入:[2,1,2] 输出:5 ...

  8. [PA2014]Muzeum

    [PA2014]Muzeum 题目大意: 有\(n\)件展品和\(m\)个警卫,每件展品有一个坐标\((x_i,y_i)\)和价值\(v_i\),每个警卫的坐标为\((x_i,y_i)\).每个警卫面 ...

  9. Selenium上传文件方法总结

    Web上本地上传图片,弹出的框Selenium是无法识别的,也就是说,selenium本身没有直接的方法去实现上传本地文件,这里总结了两种上传文件的方式. 一.利用Robot类处理文件上传. 其大致流 ...

  10. db2 merge update

    DB2 Merge 语句的作用非常强大,它可以将一个表中的数据合并到另一个表中,在合并的同时可以进行插入.删除.更新等操作.我们还是先来看个简单的例子吧,假设你定义了一个雇员表(employe),一个 ...