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)

CREATE TABLE `capacity_pm` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',

`pool_id` char(36) CHARACTER SET utf8 DEFAULT NULL COMMENT '资源池ID',

`cluster_lv1` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '集群分类',

`cluster_lv2` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '集群2级分类',

`update_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新或创建时间',

`templete_id` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '模板ID',

`templete_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '模板名称',

`templete_cpu_core` int(10) unsigned zerofill NOT NULL COMMENT '模板CPU核数',

`templete_mem_size` double NOT NULL COMMENT '模板内存大小',

`templete_disk_size` double NOT NULL COMMENT '模板磁盘大小',

`host_total` int(11) unsigned zerofill DEFAULT NULL COMMENT '主机总数',

`host_used` int(11) unsigned zerofill DEFAULT NULL COMMENT '主机已分配数量',

`cpu_core_total` int(11) unsigned zerofill DEFAULT NULL COMMENT 'cpu总核数',

`cpu_core_free` int(11) DEFAULT NULL,

`cpu_core_used` int(11) DEFAULT NULL COMMENT 'cpu已分配数量',

`cpu_core_util` double(10,3) DEFAULT NULL COMMENT 'cpu核数使用占比',

`mem_total` double DEFAULT NULL COMMENT '内存总空间',

`mem_free` double DEFAULT NULL,

`mem_used` double DEFAULT NULL,

`mem_util` double DEFAULT NULL COMMENT '内存使用占比',

`disk_total` double DEFAULT NULL,

`disk_free` double DEFAULT NULL,

`disk_used` double DEFAULT NULL,

`disk_util` double DEFAULT NULL COMMENT '磁盘使用占比',

PRIMARY KEY (`id`),

UNIQUE KEY `idx_templete_all` (`pool_id`,`templete_id`) USING BTREE COMMENT '模块ID做完整索引'

) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

CREATE TRIGGER `pm_before_insert_trigger` BEFORE INSERT ON `capacity_pm` FOR EACH ROW begin

set new.cpu_core_total=new.host_total * new.templete_cpu_core;

set new.cpu_core_used=new.host_used * new.templete_cpu_core;

set new.cpu_core_free=new.cpu_core_total - new.cpu_core_used;

set new.cpu_core_util=new.cpu_core_used / new.cpu_core_total;

end;

CREATE TRIGGER `pm_before_update_trigger` BEFORE UPDATE ON `capacity_pm` FOR EACH ROW begin

set new.cpu_core_total=new.host_total * old.templete_cpu_core;

set new.cpu_core_used=new.host_used * old.templete_cpu_core;

set new.cpu_core_free=new.cpu_core_total - new.cpu_core_used;

set new.cpu_core_util=new.cpu_core_used / new.cpu_core_total;

end;

使用navicat工具示例

测试1:直接插入数据

INSERT INTO `capacity_pm` (

pool_id,

cluster_lv1,

cluster_lv2,

update_at,

templete_id,

templete_name,

templete_cpu_core,

templete_mem_size,

templete_disk_size,

host_total,

host_used

)

VALUES

(

'7b8f0f5e2fbb4d9aa2d5fd55466d638h',null,null,now(),

't003',

'null',

'8',

'100',

'200',

'100',

'20'

),

(

'7b8f0f5e2fbb4d9aa2d5fd55466d638h',null,null,now(),

't002',

'null',

'16',

'100',

'200',

'40',

'30'

) ON DUPLICATE KEY UPDATE host_total =VALUES(host_total),host_used =VALUES(host_used);

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

待插入的数据:来自于其他表的查询;

使用 ON DUPLICATE KEY UPDATE批量更新;

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

CREATE TABLE `capacity_pm_tmp` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',

`pool_id` char(36) CHARACTER SET utf8 DEFAULT NULL COMMENT '资源池ID',

`cluster_lv1` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '集群分类',

`cluster_lv2` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '集群2级分类',

`update_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新或创建时间',

`templete_id` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '模板ID',

`templete_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '模板名称',

`templete_cpu_core` int(10) unsigned zerofill NOT NULL COMMENT '模板CPU核数',

`templete_mem_size` double NOT NULL COMMENT '模板内存大小',

`templete_disk_size` double NOT NULL COMMENT '模板磁盘大小',

`host_total` int(11) unsigned zerofill DEFAULT NULL COMMENT '主机总数',

`host_used` int(11) unsigned zerofill DEFAULT NULL COMMENT '主机已分配数量',

PRIMARY KEY (`id`),

UNIQUE KEY `idx_templete_all` (`pool_id`,`templete_id`) USING BTREE COMMENT '模块ID做完整索引'

) ENGINE=InnoDB AUTO_INCREMENT=135 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

INSERT INTO `capacity_pm_tmp` VALUES ('1', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't001', null, '0000000008', '2000', '1000', '00000000100', '00000000030');

INSERT INTO `capacity_pm_tmp` VALUES ('2', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't002', null, '0000000008', '1000', '1000', '00000000100', '00000000030');

INSERT INTO `capacity_pm_tmp` VALUES ('3', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't003', null, '0000000008', '1000', '1000', '00000000100', '00000000030');

INSERT INTO `capacity_pm_tmp` VALUES ('4', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't004', null, '0000000008', '1000', '2000', '00000000100', '00000000030');

INSERT INTO `capacity_pm_tmp` VALUES ('5', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't005', null, '0000000008', '1000', '2000', '00000000100', '00000000030');

INSERT INTO `capacity_pm_tmp` VALUES ('6', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't001', null, '0000000008', '1000', '2000', '00000000100', '00000000030');

INSERT INTO `capacity_pm_tmp` VALUES ('7', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't002', null, '0000000008', '1000', '2000', '00000000100', '00000000030');

INSERT INTO `capacity_pm_tmp` VALUES ('8', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't003', null, '0000000008', '1000', '2000', '00000000100', '00000000030');

INSERT INTO `capacity_pm_tmp` VALUES ('9', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't004', null, '0000000008', '1000', '2000', '00000000100', '00000000030');

INSERT INTO `capacity_pm_tmp` VALUES ('10', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't005', null, '0000000008', '1000', '2000', '00000000100', '00000000020');

INSERT INTO `capacity_pm_tmp` VALUES ('11', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't006', null, '0000000008', '1000', '2000', '00000000100', '00000000020');

INSERT INTO `capacity_pm_tmp` VALUES ('12', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't007', null, '0000000008', '1000', '2000', '00000000100', '00000000020');

INSERT INTO `capacity_pm_tmp` VALUES ('13', '7b8f0f5e2fbb4d9aa2d5fd55466d638e', null, null, null, 't00x', null, '0000000008', '1000', '2000', '00000000100', '00000000020');

INSERT INTO `capacity_pm_tmp` VALUES ('14', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't008', null, '0000000008', '1000', '2000', '00000000100', '00000000010');

INSERT INTO `capacity_pm_tmp` VALUES ('15', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't009', null, '0000000008', '1000', '2000', '00000000100', '00000000010');

INSERT INTO `capacity_pm_tmp` VALUES ('16', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't018', null, '0000000008', '1000', '2000', '00000000100', '00000000010');

INSERT INTO `capacity_pm_tmp` VALUES ('17', '7b8f0f5e2fbb4d9aa2d5fd55466d638f', null, null, null, 't019', null, '0000000008', '1000', '2000', '00000000100', '00000000010');

INSERT INTO `capacity_pm_tmp` VALUES ('18', '7b8f0f5e2fbb4d9aa2d5fd55466d638h', null, null, null, 't001', null, '0000000008', '1000', '2000', '00000000100', '00000000010');

INSERT INTO `capacity_pm_tmp` VALUES ('19', '7b8f0f5e2fbb4d9aa2d5fd55466d638h', null, null, null, 't002', null, '0000000008', '1000', '2000', '00000000100', '00000000010');

INSERT INTO `capacity_pm_tmp` VALUES ('20', '7b8f0f5e2fbb4d9aa2d5fd55466d638h', null, null, null, 't003', null, '0000000008', '3000', '2000', '00000000100', '00000000020');

测试插入数据

INSERT INTO `capacity_pm` (

pool_id,

cluster_lv1,

cluster_lv2,

update_at,

templete_id,

templete_name,

templete_cpu_core,

templete_mem_size,

templete_disk_size,

host_total,

host_used

)

SELECT

pool_id,

cluster_lv1,

cluster_lv2,

update_at,

templete_id,

templete_name,

templete_cpu_core,

templete_mem_size,

templete_disk_size,

host_total,

host_used

FROM

capacity_pm_tmp

ON DUPLICATE KEY UPDATE host_total = VALUES(host_total), host_used=VALUES(host_used);

参考

mysql 5.6 触发器_【mysql】mysql触发器使用示例相关推荐

  1. mysql 触发器_进阶msql触发器-指南

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update ...

  2. mysql查看触发器_在mysql中如何查看和修改触发器的代码?请问各位大师,小弟先谢谢了!!!!!!!!!...

    展开全部 在Mysql中,如若需要查看数据库中已有的触发器,可以使用 SHOW TRIGGERS 语句.SHOW TRIGGERS; 修改触发器的代码需要先删除然后重新e68a84e8a2ad6261 ...

  3. mysql 中有什么命令_常用mysql命令大全

    常用的MySQL命令大全 连接MySQL格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命 ...

  4. mysql主从数据库含义_(转)Mysql数据库主从心得整理

    管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...

  5. mysql 使用手册 权限_创建MySQL用户及用户权限管理

    通过grant [aɪ'dɛntɪfaɪd] 命令创建用户并授权 grant命令简单语法 grant all privileges on dbname.* to username@localhost  ...

  6. 有关mysql的开发介绍_深入浅出MySQL之开发篇(二)

    继续深入了解MySQL的高级特性. 1.存储过程和函数 什么是存储过程和函数 存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少 ...

  7. mysql 5.6参数_初识 MySQL 5.6 新功能、参数

    摘要: MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不定时更新). 一:性能.功能上的提升. ① 在线DDL即 onli ...

  8. mysql 查询存储过程 速度_查询mysql过程

    MySql 使用explain分析查询 今天写了个慢到哭的查询,想用explain分析下执行计划,后来发现explain也是有局限性的: EXPLAIN不会告诉你关于触发器.存储过程的信息或用户自定义 ...

  9. mysql添加函数库_创建mysql函数

    如何使用MySQL提升权限 前不久网上公开了一个MySQL Func的漏洞,讲的是使用MySQL创建一个自定义的函数,然后通过这个函数来攻击服务器.最早看到相关的报道是在o-otik上,但是公布的是针 ...

  10. mysql数据库建仓范式_存mysql个数

    MySQL学习笔记之数据类型详解 注:以下内容针对MySQL5.0及以上版本 MySQL的数据类型非常多,选择正确的数据类型对于获得高性能至关重要,本文是我结合网上看到的一些blog加上<高性能 ...

最新文章

  1. 3种方式理解旋转变换
  2. 图像去雾----暗通道
  3. 为什么密码比字符串更喜欢char []?
  4. 【简便代码+解析】1056 组合数的和 (15分)_14行代码AC
  5. python 标准化_数据标准化
  6. 闭包总结(2018.03.19)
  7. 环境部署(九):linux下安装python+chrome+Xvfb
  8. poj 1018 Communication System
  9. 字符串相似度匹配算法python_算法字符串相似度得分/哈希
  10. Jartto: 如何成为一名合格的技术面试官?
  11. 2017.7.17数据类型
  12. 是指能够被程序员看到的计算机系统的属性,计算机组成原理复习范围详细.doc...
  13. 《流畅的Python第二版》读书笔记——字典和集合
  14. python贪吃蛇代码
  15. JavaScript学习笔记3--文本框获得焦点,文本框里提示信息自动消失
  16. Mac安装pr拓展时没有CEP文件夹
  17. xp计算机护眼模式,xp系统桌面上老是显示护眼模式!(图)
  18. 前端实现数据base64解码
  19. Safari 14.0 版本安装json插件
  20. Hadoop First Job

热门文章

  1. matlab数据导出wps,怎么把金山WPS表格的数据导入MATLAB/
  2. python报错跳过继续执行_python如何设置报错跳过
  3. c语言中除法与余数,带符号整数的除法与余数
  4. 巧用立体声codec CL1026 的EQ
  5. 斯人已去长风存 谈谈 CyanogenMod 的前身今世
  6. Arduino驱动HDC1080测量温湿度
  7. 利用html简单自我介绍案例
  8. “天才少年” 27岁华为副总裁 百度CTO 成为阶下囚的传奇经历
  9. C++complex复数类
  10. 饥荒联机版加入服务器显示无应答,饥荒联机版水中木更新内容汇总 8月13日更新预览[多图]...