触发器是与表有关的数据库对象,触发器只能是针对创建的永久表,而不能是临时表。

1.1 创建触发器

 -- 语法:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt

  trigger_time:是触发器的触发时间,可以是 before或after, before是检查约束前触发,而after是检查约束后触发。
  trigger_event:是触发器的触发事件,可以是 insert,update,delete。
  同一个表相同的触发时间的相同触发事件,只能定义一个触发器。使用别名old和new 来引用触发器中发生变化的记录内容。

--  先查看city_memory数据(触发前查看表数据)
SELECT * FROM city_memory;

-- 创建city表的insert 触发器 使用AFTER触发时间
DELIMITER $$
CREATE TRIGGER tri_city
AFTER INSERT ON city FOR EACH ROW BEGIN
INSERT INTO city_memory (country_id, cityname, Citycode)
VALUES (new.country_id, new.cityname, new.Citycode);
END;
$$
DELIMITER ; -- 插入city表数据,触发city表插入触发器
INSERT INTO city(country_id, cityname, Citycode) VALUES(2,'中国触发','001触发');
-- 再次查看SELECT * FROM city_memory; 如下图所示:

  下面是city表数据:

2. 查看触发器

-- 使用information_schema.triggers来查看
SELECT * FROM information_schema.triggers WHERE trigger_name = 'tri_city'

3. 删除触发器

DROP TRIGGER tri_city;

总结:触发器的限制:

(1)触发程序不能调用将数据返回客户端的存储程序。

(2)不能在触发器中使用以显式或隐式方式开始或结束事务的语句。

编写过于复杂的触发器或者增加过多的触发器对记录的插入、更新、删除操作肯定会有比较严重的影响。不要将应用的处理逻辑过多的依赖于触发器来处理。

mysql 开发基础系列19 触发器的更多相关文章

  1. mysql 开发基础系列12 选择合适的数据类型(上)

    一. char 与varchar比较 在上图的最后一行的值只适用在"非严格模式",关于严格模式后面讲到.在“开发基础系列4“ 中讲到CHAR 列删除了尾部的空格.由于char是固定 ...

  2. mysql 开发基础系列17 存储过程和函数(上)

    一. 概述 存储过程和函数是事先经过编译并存储在数据库中的一段sql语句集合,可以简化应用开发人员的很多工作,减少数据在数据库与应用服务器之间的传输,提高数据处理效率是有好处的.存储过程和函数的区别在 ...

  3. mysql 开发基础系列22 SQL Model

    一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql model 定义了mysql应用支持的sql语法,数据校验等,这样更容易在不同的环境中使用mysql. sql ...

  4. mysql 开发基础系列20 事务控制和锁定语句(上)

    一.概述 在mysql 里不同存储引擎有不同的锁,默认情况下,表锁和行锁都是自动获得的,不需要额外的命令, 有的情况下,用户需要明确地进行锁表或者进行事务的控制,以便确保整个事务的完整性.这样就需要使 ...

  5. mysql 开发基础系列18 存储过程和函数(下)

    1. 光标的使用(游标) 在存储过程和函数中可以使用光标对结果集进行循环的处理,光标使用包括光标的声明,open ,fetch,close. 下面在存储过程中使用一个光标, 这个举例中光标里的逻辑不重 ...

  6. mysql 开发基础系列15 索引的设计和使用

    一.概述 所有mysql 列类型都可以被索引,是提高select查询性能的最佳方法. 根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种引擎对每个表至少支持16个索引,总索引长度至少为256字 ...

  7. mysql 开发基础系列14 字符集

    字符集是一套文字符号及其编码,比较规则的集合.第一个字符集是ascll(american standard code for information interchange).  1.  选择合适的字 ...

  8. mysql 开发基础系列13 选择合适的数据类型(下)

    一.  BloB和Text 1. 合成索引 合成索引可以提高大文本字段BLOB和Text的查询性能, 合成索引是在表中增加一个字段存放散列值,这种技术只能用于精确匹配的查询,可以使用md5()或sha ...

  9. mysql 开发基础系列10 存储引擎 InnoDB 介绍

    一. 概述: InnoDB存储引擎提供了具有提交,回滚,和崩溃恢复能力的事务安全,对比MYISAM 的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引.它的特点有如下: ...

随机推荐

  1. Vmware Workstation实现CentOS6.10_x64 下ORACLE RAC 11.2.0.4的搭建

    想必大家在学习ORACLE 11g时,都想搭建一个RAC的实验环境.在搭建RAC实验环境时,会碰到诸如IP怎么规划.虚拟机环境下怎么共享磁盘.ASM磁盘创建,以及安装过程中会遇到这样那样的问题.搭建一 ...

  2. 上传本地文件到github

    第一步:创建新的仓库 勾选Initialize this repository with a README选项,自动创建REAMDE.md文件. 第二步: $ git config --global ...

  3. python3 爬取搜狗微信的文章

    目标地址:http://weixin.sogou.com/weixin? 这个地址是搜狗微信的文章搜索,可以搜索到微信的文章,而我们目标就是这些文章内容 这个url经过测试,当我们没登陆微信只能看到1 ...

  4. android6.0以上权限动态申请,有视频链接可以看效果。

    android6.0以上某些权限需要动态申请,虽然现在大多的手机系统版本在6.0,但是升级到6.0及以上是迟早的事,所以如何能够更好的控制动态申请权限时能有好的提示用户,及给用户带去更好的体验,是需要 ...

  5. 在JAVA中对于类,对象,继承,多态的看法

    这是我第一次学高级语言.很抱歉选择了JAVA,目标是开发一款可以上线的APP. 类:是建立对象的一个模板,就是系列产品中的基础款图纸.只是图纸而已.不是产品. 对象:是一个可以操作的对象.新建一个对象 ...

  6. shell遍历文件夹

    遍历目录下的所有文件 假如有一个文件夹路径为dir,遍历文件 for file in /path/dir/* do if test -f $file then echo $file arrary=($ ...

  7. Go学习之旅

    备忘这个 官方文档 https://go-zh.org/doc/ Go指南 https://tour.go-zh.org/welcome/1 Go语言圣经 https://yar999.gitbook ...

  8. 关于SQL2008R2连接服务器出错问题

    在安装SQL2008R2后,在公司里用VS2013测试可以连接,可是回到寝室却出了问题,当打开SSMS连接服务器的时候会提示: “在与SQL Server建立连接时出现与网络相关的或特定于实例的错误. ...

  9. python 学习之路【目录】

    目录: python--常用函数

  10. #227 Generate Random Whole Numbers within a Range

    我们之前生成的随机数是在0到某个数之间,现在我们要生成的随机数是在两个指定的数之间. 我们需要定义一个最小值和一个最大值. 下面是我们将要使用的方法,仔细看看并尝试理解这行代码到底在干嘛: Math. ...