今天第一次用MySQL的触发器,怕忘了,赶紧写篇博客记录一下。

废话不说,先上语法:

1 CREATE TRIGGERtrigger_name2 { BEFORE | AFTER } { INSERT | UPDATE | DELETE}3 ONtbl_name4 FOREACH ROW5 trigger_body

事情的起因是这样的:我有一个人员信息表 pers。因为字段很多,就把中文字段单出来,另建了一个表 perscn。我希望当 pers 插入一条记录,perscn 也能自动插入一条记录,这样就能保证两张表的记录一一对应。MySQL中的触发器正好满足这个需求。不过也是研究了半天才最终搞定。

先上代码:

1 CREATE TRIGGERt_pers_perscn2 AFTER INSERT ONpers3 FOREACH ROW4 INSERT INTO perscn(pid, sname, oname, unic) VALUES(5 (SELECT MAX(pid) FROMpers),6 (SELECT sname FROM pers ORDER BY pid DESC LIMIT 1),7 (SELECT oname FROM pers ORDER BY pid DESC LIMIT 1),8 (SELECT unic FROM pers ORDER BY pid DESC LIMIT 1)9 );

以上代码大致是说:

1 创建触发器 t_pers_perscn

2 在 pers 插入新记录之后

3 对于每一条记录

4 往 perscn 插入一条记录,包含 4 个字段,值分别是(

5 (pid),

6 (sname),

7 (oname),

8 (unic)

9 );

因为需要获取 pers 表中插入记录的 ID(本表中字段名为 pid),一开始想着用 LAST_INSERT_ID(),行不通。后来想到 MAX(),倒是能获得最新插入的 pid 值,但 perscn 中的其它值却不能用 SELECT sname FROM pers WHERE pid = MAX(pid); 来获取,看来在 WHERE 语句中是不能用 MAX() 函数吧…… 最后只能用笨办法,先对 pid 进行降序排列,然后用 LIMIT 限制 1 条记录,这样倒是也能获得与 MAX() 函数相同的效果。没办法,就是这么笨……

回到最上面的语法,大致意思是:

1 CREATE TRIGGER 触发器名称2 在 INSERT、UPDATE或DELETE动作之前或之后

3 ON 上述动作所作用的表

4 FOR EACH ROW(规定语句,照抄吧)

5 以上动作所触发的SQL语句(即正常SQL操作语句)

其中,第5步的 trigger_body 一般只能写一行。如果有多条操作语句,则需要先用 DELIMITER 暂时更改下语句结束符,然后用 BEGIN...END... 语句来写操作语句(因为BEGIN...END...里必须用半角分号 “;” 来标识一行语句的结束,所以才需要用 DELIMITER)。关于更改 DELIMITER,请见官方文档的示例:

1 mysql> delimiter //

2 mysql> CREATE PROCEDURE dorepeat(p1 INT)3 -> BEGIN

4 -> SET @x = 0;5 -> REPEAT SET @x = @x + 1; UNTIL @x > p1 ENDREPEAT;6 -> END

7 -> //

8 Query OK, 0 rows affected (0.00sec)9 mysql> delimiter ;

触发器真是个好东西,自动化的神器啊…… 改天好好再研究研究、发掘发掘~~~

mysql通过触发器获取数据表的操作id_MySQL触发器初试:当A表插入新记录,自动在B表中插入相同ID的记录...相关推荐

  1. Mysql使用binlog恢复数据解决误操作问题的两种方法

    Mysql使用binlog恢复数据解决误操作问题的两种方法 参考文章: (1)Mysql使用binlog恢复数据解决误操作问题的两种方法 (2)https://www.cnblogs.com/Data ...

  2. [数据库] Navicat for MySQL事件Event实现数据每日定期操作

    在我们操作数据库过程中,通常会遇到一些某个时间点操作数据库的问题,例如:         (1).每天凌晨12点对数据库进行定时备份,结算和汇总:         (2).每天凌晨2点删除数据库前三天 ...

  3. navicat for mysql 事件_Navicat for MySQL事件Event实现数据每日定期操作

    在我们操作数据库过程中,通常会遇到一些某个时间点操作数据库的问题,例如: (1).每天凌晨12点对数据库进行定时备份,结算和汇总: (2).每天凌晨2点删除数据库前三天的数据: (3).插入某个数据超 ...

  4. navicat for mysql 事件_[数据库] Navicat for MySQL事件Event实现数据每日定期操作

    在我们操作数据库过程中,通常会遇到一些某个时间点操作数据库的问题,例如: (1).每天凌晨12点对数据库进行定时备份,结算和汇总: (2).每天凌晨2点删除数据库前三天的数据: (3).插入某个数据超 ...

  5. 【MySQL】逻辑库与数据表相关操作

    前言 上篇博客让我们了解了什么是数据库和我们为什么要学习MySQL数据库,如果没有看的兄弟可以先去看看那一篇然后再回来继续看本篇. 传送门:为什么要学习MySQL数据库呢? 本篇文章就来总结一下数据库 ...

  6. 可以对本表做操作的触发器

    在写trigger的时候,经常会遇到这种情况 当在程序块中需要对trigger本表进行修改或查询的时候,系统会提示错误:  ORA-04091: table is mutating, trigger/ ...

  7. 计算机word如何插入新列表,电脑word文档中怎么给表格自动添加序号?怎么增加表目录...

    电脑word文档中怎么给表格自动添加序号?怎么增加表目录 腾讯视频/爱奇艺/优酷/外卖 充值4折起 我们看一篇word文件的时候,如果篇幅比较长而表格又比较多的话,一般会给这篇word设置一个表目录. ...

  8. mysql触发器对同一张表做操作_MySql 触发器对同表操作

    触发器初始结构: DELIMITER $$ CREATE TRIGGER `数据库名`.`触发器名` BEFORE/AFTER INSERT/UPDATE/DELETE ON `数据库名`.`表名` ...

  9. js采用ajax发送请求获取数据(实例操作)

    来,案例之前,容我分享一下js如何发送请求. 原生js发送请求: let xhr= new XMLHttpRequest(); // methods:GET/POST请求方式等,url:请求地址,tr ...

  10. MySQL游标无法获取数据-1329 - No data - zero rows fetched, selected, or processed

    1329 - No data - zero rows fetched, selected, or processed 在存储过程中使用游标的时候,要确保声明的变量唯一性,不要和SQL的查询字段一样!! ...

最新文章

  1. 所有库在门不显示封装_奈雪和石库门在一起,太上头
  2. openssl NDK 交叉编译
  3. 使用Maven管理的项目,如何设置Context Root
  4. Eclipse中src/main/resources配置文件启动问题
  5. Failed to maintain projects LRU cache for dir *********
  6. 《如何更改其他程序ListView控件中某个Item的内容》
  7. 针对灰鸽子声明 金山“四问”灰鸽子工作室
  8. 致传统企业朋友:不够痛就别微服务,有坑 (1)
  9. 鲍尔默先生,请拿出证据
  10. mysql utf8 bom_UTF8的BOM
  11. Mac使用U盘重装系统
  12. jetbrains验证服务器,搭建个人jetbrains授权服务器
  13. 【PM】产品需求文档PRD的一般格式
  14. takes 1 positional argument but 2 were given
  15. 如何调用WxJump的API接口实现微信网址链接转二维码
  16. 无人驾驶汽车系统入门(二十六)——基于深度学习的实时激光雷达点云目标检测及ROS实现
  17. DockerHub上最受欢迎的151个官方镜像,相传掌握第17个可以主宰宇宙!
  18. 解决IE不能上网,火狐能上网 谷歌和IE浏览器都上不了网只能火狐上怎么办?
  19. Matlab-稀疏矩阵
  20. 知识图谱实战开发案例剖析(22)Protege开发环境安装部署

热门文章

  1. 简单一招能让你的浏览器下载速度提升几十倍,从此弃用IDM等下载器
  2. php编写解一元一次方程,一元一次方程及解法
  3. 组图:释放性感诱惑 内地超级豪放女星大盘点
  4. 程序员的十楼层,看看自己在第几层
  5. 并发安全的计数统计类:AtomicLong和LongAdder
  6. 腾讯云之轻量应用服务器搭建Socks5代理服务器实现游戏单窗口单IP
  7. idea使用技巧总结,超实用(2年mac idea使用经验)
  8. input框的23种类型
  9. 制作flash cs的简单小游戏
  10. Python全栈最全学习之路-Python基础(十一)