mysql触发器

  • 时间点:before/after
  • 触发事件: update/delete/insert
  • 时间点+触发事件:构成一个完整的触发器的触发时机;
  • 一个触发时机最多只能由1个Trigger:如 before-insert最多只能有1个触发器,如果需要多个,需要在1个Trigger内些sql Statement;

old和new

  • insert:只有new关键字可以使用;
  • update: new和old关键字都可以使用;
  • delete: 只有old关键字可以使用;

建表语句 + 触发器 (capacity_pm)

  1. CREATE TABLE `capacity_pm` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  3. `pool_id` char(36) CHARACTER SET utf8 DEFAULT NULL COMMENT '资源池ID',
  4. `cluster_lv1` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '集群分类',
  5. `cluster_lv2` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '集群2级分类',
  6. `update_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新或创建时间',
  7. `templete_id` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '模板ID',
  8. `templete_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '模板名称',
  9. `templete_cpu_core` int(10) unsigned zerofill NOT NULL COMMENT '模板CPU核数',
  10. `templete_mem_size` double NOT NULL COMMENT '模板内存大小',
  11. `templete_disk_size` double NOT NULL COMMENT '模板磁盘大小',
  12. `host_total` int(11) unsigned zerofill DEFAULT NULL COMMENT '主机总数',
  13. `host_used` int(11) unsigned zerofill DEFAULT NULL COMMENT '主机已分配数量',
  14. `cpu_core_total` int(11) unsigned zerofill DEFAULT NULL COMMENT 'cpu总核数',
  15. `cpu_core_free` int(11) DEFAULT NULL,
  16. `cpu_core_used` int(11) DEFAULT NULL COMMENT 'cpu已分配数量',
  17. `cpu_core_util` double(10,3) DEFAULT NULL COMMENT 'cpu核数使用占比',
  18. `mem_total` double DEFAULT NULL COMMENT '内存总空间',
  19. `mem_free` double DEFAULT NULL,
  20. `mem_used` double DEFAULT NULL,
  21. `mem_util` double DEFAULT NULL COMMENT '内存使用占比',
  22. `disk_total` double DEFAULT NULL,
  23. `disk_free` double DEFAULT NULL,
  24. `disk_used` double DEFAULT NULL,
  25. `disk_util` double DEFAULT NULL COMMENT '磁盘使用占比',
  26. PRIMARY KEY (`id`),
  27. UNIQUE KEY `idx_templete_all` (`pool_id`,`templete_id`) USING BTREE COMMENT '模块ID做完整索引'
  28. ) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  29. CREATE TRIGGER `pm_before_insert_trigger` BEFORE INSERT ON `capacity_pm` FOR EACH ROW begin
  30. set new.cpu_core_total=new.host_total * new.templete_cpu_core;
  31. set new.cpu_core_used=new.host_used * new.templete_cpu_core;
  32. set new.cpu_core_free=new.cpu_core_total - new.cpu_core_used;
  33. set new.cpu_core_util=new.cpu_core_used / new.cpu_core_total;
  34. end;
  35. CREATE TRIGGER `pm_before_update_trigger` BEFORE UPDATE ON `capacity_pm` FOR EACH ROW begin
  36. set new.cpu_core_total=new.host_total * old.templete_cpu_core;
  37. set new.cpu_core_used=new.host_used * old.templete_cpu_core;
  38. set new.cpu_core_free=new.cpu_core_total - new.cpu_core_used;
  39. set new.cpu_core_util=new.cpu_core_used / new.cpu_core_total;
  40. end;

使用navicat工具示例


测试1:直接插入数据

  1. INSERT INTO `capacity_pm` (
  2. pool_id,
  3. cluster_lv1,
  4. cluster_lv2,
  5. update_at,
  6. templete_id,
  7. templete_name,
  8. templete_cpu_core,
  9. templete_mem_size,
  10. templete_disk_size,
  11. host_total,
  12. host_used
  13. )
  14. VALUES
  15. (
  16. '7b8f0f5e2fbb4d9aa2d5fd55466d638h',null,null,now(),
  17. 't003',
  18. 'null',
  19. '8',
  20. '100',
  21. '200',
  22. '100',
  23. '20'
  24. ),
  25. (
  26. '7b8f0f5e2fbb4d9aa2d5fd55466d638h',null,null,now(),
  27. 't002',
  28. 'null',
  29. '16',
  30. '100',
  31. '200',
  32. '40',
  33. '30'
  34. ) ON DUPLICATE KEY UPDATE host_total =VALUES(host_total), host_used =VALUES(host_used);

测试2:insert into table...select from other table;

  1. 待插入的数据:来自于其他表的查询;
  2. 使用 ON DUPLICATE KEY UPDATE 批量更新;

创建另一个表,模拟数据来源

  1. CREATE TABLE `capacity_pm_tmp` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  3. `pool_id` char(36) CHARACTER SET utf8 DEFAULT NULL COMMENT '资源池ID',
  4. `cluster_lv1` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '集群分类',
  5. `cluster_lv2` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '集群2级分类',
  6. `update_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新或创建时间',
  7. `templete_id` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '模板ID',
  8. `templete_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '模板名称',
  9. `templete_cpu_core` int(10) unsigned zerofill NOT NULL COMMENT '模板CPU核数',
  10. `templete_mem_size` double NOT NULL COMMENT '模板内存大小',
  11. `templete_disk_size` double NOT NULL COMMENT '模板磁盘大小',
  12. `host_total` int(11) unsigned zerofill DEFAULT NULL COMMENT '主机总数',
  13. `host_used` int(11) unsigned zerofill DEFAULT NULL COMMENT '主机已分配数量',
  14. PRIMARY KEY (`id`),
  15. UNIQUE KEY `idx_templete_all` (`pool_id`,`templete_id`) USING BTREE COMMENT '模块ID做完整索引'
  16. ) ENGINE=InnoDB AUTO_INCREMENT=135 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  17. INSERT INTO `capacity_pm_tmp` VALUES ('1', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't001', null, '0000000008', '2000', '1000', '00000000100', '00000000030');
  18. INSERT INTO `capacity_pm_tmp` VALUES ('2', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't002', null, '0000000008', '1000', '1000', '00000000100', '00000000030');
  19. INSERT INTO `capacity_pm_tmp` VALUES ('3', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't003', null, '0000000008', '1000', '1000', '00000000100', '00000000030');
  20. INSERT INTO `capacity_pm_tmp` VALUES ('4', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't004', null, '0000000008', '1000', '2000', '00000000100', '00000000030');
  21. INSERT INTO `capacity_pm_tmp` VALUES ('5', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't005', null, '0000000008', '1000', '2000', '00000000100', '00000000030');
  22. INSERT INTO `capacity_pm_tmp` VALUES ('6', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't001', null, '0000000008', '1000', '2000', '00000000100', '00000000030');
  23. INSERT INTO `capacity_pm_tmp` VALUES ('7', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't002', null, '0000000008', '1000', '2000', '00000000100', '00000000030');
  24. INSERT INTO `capacity_pm_tmp` VALUES ('8', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't003', null, '0000000008', '1000', '2000', '00000000100', '00000000030');
  25. INSERT INTO `capacity_pm_tmp` VALUES ('9', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't004', null, '0000000008', '1000', '2000', '00000000100', '00000000030');
  26. INSERT INTO `capacity_pm_tmp` VALUES ('10', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't005', null, '0000000008', '1000', '2000', '00000000100', '00000000020');
  27. INSERT INTO `capacity_pm_tmp` VALUES ('11', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't006', null, '0000000008', '1000', '2000', '00000000100', '00000000020');
  28. INSERT INTO `capacity_pm_tmp` VALUES ('12', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't007', null, '0000000008', '1000', '2000', '00000000100', '00000000020');
  29. INSERT INTO `capacity_pm_tmp` VALUES ('13', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't00x', null, '0000000008', '1000', '2000', '00000000100', '00000000020');
  30. INSERT INTO `capacity_pm_tmp` VALUES ('14', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't008', null, '0000000008', '1000', '2000', '00000000100', '00000000010');
  31. INSERT INTO `capacity_pm_tmp` VALUES ('15', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't009', null, '0000000008', '1000', '2000', '00000000100', '00000000010');
  32. INSERT INTO `capacity_pm_tmp` VALUES ('16', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't018', null, '0000000008', '1000', '2000', '00000000100', '00000000010');
  33. INSERT INTO `capacity_pm_tmp` VALUES ('17', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't019', null, '0000000008', '1000', '2000', '00000000100', '00000000010');
  34. INSERT INTO `capacity_pm_tmp` VALUES ('18', '7b8f0f5e2fbb4d9aa2d5fd55466d638h', null, null, null, 't001', null, '0000000008', '1000', '2000', '00000000100', '00000000010');
  35. INSERT INTO `capacity_pm_tmp` VALUES ('19', '7b8f0f5e2fbb4d9aa2d5fd55466d638h', null, null, null, 't002', null, '0000000008', '1000', '2000', '00000000100', '00000000010');
  36. INSERT INTO `capacity_pm_tmp` VALUES ('20', '7b8f0f5e2fbb4d9aa2d5fd55466d638h', null, null, null, 't003', null, '0000000008', '3000', '2000', '00000000100', '00000000020');

测试插入数据

  1. INSERT INTO `capacity_pm` (
  2. pool_id,
  3. cluster_lv1,
  4. cluster_lv2,
  5. update_at,
  6. templete_id,
  7. templete_name,
  8. templete_cpu_core,
  9. templete_mem_size,
  10. templete_disk_size,
  11. host_total,
  12. host_used
  13. )
  14. SELECT
  15. pool_id,
  16. cluster_lv1,
  17. cluster_lv2,
  18. update_at,
  19. templete_id,
  20. templete_name,
  21. templete_cpu_core,
  22. templete_mem_size,
  23. templete_disk_size,
  24. host_total,
  25. host_used
  26. FROM
  27. capacity_pm_tmp
  28. ON DUPLICATE KEY UPDATE host_total = VALUES(host_total), host_used=VALUES(host_used);

参考

mysql5.6-trigger官网

【mysql】mysql触发器使用示例的更多相关文章

  1. (转)MySQL触发器trigger示例详解

    一.什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[ ...

  2. mysql trigger 触发器

    创建触发器: CREATE [DEFINER = {user|CURRENT_USER}] TRIGGER trigger_name trigger_time trigger_event ON tbl ...

  3. mysql之触发器trigger 详解

    为了梦想,努力奋斗! 追求卓越,成功就会在不经意间追上你 mysql之触发器trigger 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table)  ...

  4. 初试mysql存储过程&触发器

    玩mysql以来,一直没有试过实现存储过程,因为存储过程的语法看起来有些笨重.所以一直采用手动批量运行查询,而且要手动改日期之类的参数. 今天尝试着学了一会,发现其实是很简单的.语法上确实格式复杂些, ...

  5. MySql之触发器的使用

    一:触发器的使用场景 当数据库的记录发生变化时,自动触发某些操作. MySQL的触发器响应三种操作,六种场合: 三种操作:DELETE.INSERT.UPDATE. 六种场合:三种操作的BEFORE. ...

  6. mysql权限管理命令示例

    mysql权限管理命令示例 grant all privileges on *.* to *.* identified by 'hwalk1'; flush privileges; insert in ...

  7. MYSQL:基础——触发器

    MYSQL基础——触发器 引入触发器 什么是触发器 如果你想要某条语句(或某些语句)在事件发生时自动执行.比如: 每当订购一个产品时,都从库存数量中减去订购的数量:无论何时删除一行,都在某个存档表中保 ...

  8. MySQL创建触发器的时候报1419错误( 1419 - You do not have the SUPER privilege and binary logging is enabled )

    mysql创建触发器的时候报错: 解决方法:第一步,用root用户登录:mysql -u root -p第二步,设置参数log_bin_trust_function_creators为1:set gl ...

  9. mysql 视图 触发器 存储过程 函数事务 索引

    mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...

  10. 初用MySQL Mysql示例库 Navicat15

    初用MySQL Mysql示例库 Navicat15   查询MySQl版本 Mysql shell > select version(); 右括号,not version   查看初始密码 M ...

随机推荐

  1. python命名空间与作用域

    python命名空间与作用域   命名空间是名称与对象之间的关系,可以将命名空间看做是字典,其中的键是名称,值是对象. 命名空间不共享名称. 在命名空间中的名称能将任何python对象作为值,在不同的 ...

  2. TreeTagger

    大家都知道TreeTagger是一个用于词性标注和词型还原的工具,它的返回结果由三部分组成:目标词汇,词性,原形.那该工具是怎样判断目标词汇的词性的呢?又是怎样得到目标词汇的原形的呢?本文就是从这两个 ...

  3. golang 缺少逗号报错问题

    一个逗号引发的语法报错问题:syntax error: unexpected newline, expecting comma or }或者missing ',' before newline in ...

  4. 新浪天气api

    package com.smartdot.dcu; /** * java获取新浪天气预报代码 */ import java.io.FileNotFoundException; import java. ...

  5. 查看selinux与关闭方法

    查看当前用户selinux 状态 [root@o- ~]# getenforce Disabled [root@o- ~]# setenforce usage: setenforce [ Enforc ...

  6. java特殊抽象类-接口

  7. HTML5:表格相关标记及其属性

    表格相关标记及其属性 <table>:表格,包括以下属性 属性 说明 width 宽度(有像素和百分比两种表示方法) height 高度(有像素和百分比两种表示方法) border 边框粗 ...

  8. nodejs -- fs模块 ---> readFile 函数 1) fs.readFile(filename, "binary", function(error, file) 2) response.write(file, "binary");

    一:代码: 1.1 入口文件: index.js var server = require('./server'); var router = require("./router" ...

  9. AlwaysOn环境下的压缩Log文件方法

    Step1.将DB脱离可用性组 Step2.修改为简单恢复模式>收缩文件>修改回完整恢复模式 -- Truncate the log by changing the database re ...

  10. 剑指Offer 33. 丑数 (其他)

    题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 题目地 ...