【mysql】mysql触发器使用示例
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】mysql触发器使用示例的更多相关文章
- (转)MySQL触发器trigger示例详解
一.什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[ ...
- mysql trigger 触发器
创建触发器: CREATE [DEFINER = {user|CURRENT_USER}] TRIGGER trigger_name trigger_time trigger_event ON tbl ...
- mysql之触发器trigger 详解
为了梦想,努力奋斗! 追求卓越,成功就会在不经意间追上你 mysql之触发器trigger 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) ...
- 初试mysql存储过程&触发器
玩mysql以来,一直没有试过实现存储过程,因为存储过程的语法看起来有些笨重.所以一直采用手动批量运行查询,而且要手动改日期之类的参数. 今天尝试着学了一会,发现其实是很简单的.语法上确实格式复杂些, ...
- MySql之触发器的使用
一:触发器的使用场景 当数据库的记录发生变化时,自动触发某些操作. MySQL的触发器响应三种操作,六种场合: 三种操作:DELETE.INSERT.UPDATE. 六种场合:三种操作的BEFORE. ...
- mysql权限管理命令示例
mysql权限管理命令示例 grant all privileges on *.* to *.* identified by 'hwalk1'; flush privileges; insert in ...
- MYSQL:基础——触发器
MYSQL基础——触发器 引入触发器 什么是触发器 如果你想要某条语句(或某些语句)在事件发生时自动执行.比如: 每当订购一个产品时,都从库存数量中减去订购的数量:无论何时删除一行,都在某个存档表中保 ...
- 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 ...
- mysql 视图 触发器 存储过程 函数事务 索引
mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...
- 初用MySQL Mysql示例库 Navicat15
初用MySQL Mysql示例库 Navicat15 查询MySQl版本 Mysql shell > select version(); 右括号,not version 查看初始密码 M ...
随机推荐
- 模型-视图-控制器模式(MVC模式,10种常见体系架构模式之一)
一.简介: 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围. 模型-视图-控制器模式,也称为MVC模式.是软件 ...
- UTC,BJT时间的换算
题目内容:UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果小时小于10,则没有千位 ...
- .net core部署到Ubuntu碰到的问题
数据库连接的时候,会报错“MySql.Data.MySqlClient.MySqlException:“The host localhost does not support SSL connecti ...
- python单例(重点)
单例 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题的成熟的 ...
- 初见《构建之法》orz……
作为一个大二的计科狗,还是对软件设计有些懵,尽管之前学习过软件工程,但并没有掌握,突如其来的软件设计实践,让我着实傻眼. 通过消息得知,要学习<构建之法>,就去搜了一下,它是以实践为基础的 ...
- mpvue 转小程序实践总结
介绍 Mpvue 是一个使用 Vue.js 开发小程序的前端框架. 基础介绍 框架基于 Vue.js 核心,修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运行在小程序 ...
- java面向对象编程(五)--四大特征之抽象、封装
1.抽象 我们在前面去定义一个类时候,实际上就是把一类事物的共有的属性和行为提取出来,形成一个物理模型(模版).这种研究问题的方法称为抽象. 2.封装 封装就是把抽象出来的数据和对数据的操作封装在一起 ...
- python+flask开发小白第二天
使用VSCode编译python web页面 1.先从最基础的说起吧,关于VSCode的使用: 运行python程序与运行java,c,c++程序一样,需要新建一个文件,第一个文件建议不要新建在本地的 ...
- I/O简介
用户空间是常规进程所在区域.JVM就是常规进程,驻守于用户空间.用户空间是非特权区域,在该区域执行的代码不能直接访问硬件设备. 内核空间是操作系统所在区域.内核代码有特别的权利:它能与设备控制器通讯, ...
- Python:从入门到实践--第十章--文件和异常--练习
#.python学习笔记:在文本编辑器中新创建一个文件,写几句话老总结你至此学到的python知识 #其中‘In Python you can’ 打头.将这个文件命名为learning_python. ...