虽然在开发项目中触发器很少使用(基本上都是靠代码来进行维护),但是这种触发器的思路我们可以借鉴,定义自己的hook事件,简单讲一下在触发器中遇到的一些问题。
1,创建触发器时,mysql数据表的存储引擎是innodb
2,navicate 创建mysql触发器:触发器是基于表的,右击表选择设计表,里面有触发器。
3,在mysql 目前5.7版本,触发器调用存储过程,存储过程不能使用动态sql ,另外存储过程中调用动态sql如下:
SET @sel_sql = CONCAT(
"SELECT COUNT(id) AS count FROM sample
WHERE is_del = 1",
opt,
" AND last_commit_time >'",
start_hour,
"' AND last_commit_time < '",
end_hour,
"' ORDER BY last_commit_time into @datas"
);
其中,opt 和 start_hour 是传过来的变量。我这里面查询的数据 后续需要使用 所以我进行一个 into @datas
上面这一步是进行拼接sql, 下面这一步是执行(详情可以百度)
;set @excutesql = @sel_sql; //可以不写
PREPARE stmt from @excutesql; // 加载资源
execute stmt; // 执行
DEALLOCATE PREPARE stmt; //释放 资源
SELECT @datas INTO datas