MySQL触发器概念原理与用法

Posted 请叫我东子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL触发器概念原理与用法相关的知识,希望对你有一定的参考价值。

1、触发器的是什么?

触发器(trigger)是mysql提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete, update)时就会激活它执行。

来源于百度百科

简言之:你执行一条sql语句,这条sql语句的执行会自动去触发执行其他的sql语句。

2、触发器创建的四个要素

1.(监视地点(table)

  1. 监视事件(insert/update/delete)
  2. 触发时间(after/before)
  3. 触发事件(insert/update/delete)

3、触发器的语法

  1. 查看已有触发器:show triggers
  2. 删除已有触发器:drop trigger triggerName
  3. 创建触发器:create trigger triggerName
CREATE TRIGGER tr_article_detail_info_insert BEFORE INSERT ON db_jkgg.article_detail_info FOR EACH ROW
BEGIN
	SET NEW.view_number =  FLOOR(200 + (RAND() * 501));
END;

4、触发器可以使用的MySQL版本:

版本:MySQL5以上

5、使用场景例子:

  • 每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写
  • 每当订购一个产品时,都从库存数量中减去订购的数量
  • 无论何时删除一行,都在某个存档表中保留一个副本
  • 每当创建一篇资讯文章,要随机生成浏览次数等
    即:在某个表发生更改时自动处理。

6、使用案例

内容管理系统有这样一个需求,当新增一篇资讯文章时候,同时生成一个随机的浏览数量。

6.1 创建article_detail_info

-- 资讯文章的表结构
CREATE TABLE `article_detail_info` (
  `article_id` int(11) NOT NULL AUTO_INCREMENT,
  `keywords` varchar(1024) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关键字',
  `description` varchar(5000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'description 文章导读',
  `article_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文章的url',
  `author` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '作者',
  `title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '标题',
  `source` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源',
  `image` varchar(1024) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '主图片',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `view_number` int(11) DEFAULT '0' COMMENT '浏览量',
  `share_view` int(11) DEFAULT '0' COMMENT '分享量',
  `attribute` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文章属性 1 首页推荐  2 原创',
  `audit_status` tinyint(11) DEFAULT NULL COMMENT '审核状态 1 待审核 2 审核通过 3 审核不通过',
  `static_file_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '静态化后文件存储路径',
  `is_delete` tinyint(4) DEFAULT '1' COMMENT '删除  0 删除 1 未删除',
  `is_top` tinyint(4) DEFAULT '0' COMMENT '是否指定 0 正常  1 置顶',
  `tags` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '标签',
  `is_original` tinyint(4) DEFAULT '0' COMMENT '是否原创 0 不是 1是',
  `is_hpr` tinyint(4) DEFAULT '0' COMMENT '是否首页推荐  0 否 1是',
  `is_vedio` tinyint(4) DEFAULT '0' COMMENT '是否视频 ',
  `vedio_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '视频url',
  `vedio_cover_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '视频封面url',
  PRIMARY KEY (`article_id`)
) ENGINE=InnoDB AUTO_INCREMENT=822 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文章详情';

6.2 创建触发器tr_article_detail_info_insert

-- 为表article_detail_info创建触发器 自动生成200-500的随机数作为浏览量
CREATE TRIGGER `tr_article_detail_info_insert` BEFORE INSERT ON `article_detail_info` FOR EACH ROW BEGIN
	SET NEW.view_number =  FLOOR(200 + (RAND() * 501));
END;

6.3 验证结果

6.3.1 插入数据

INSERT INTO `db_jkgg`.`article_detail_info` ( `keywords`, `description`,`article_url`,  `author`, `title`, `source`, `image`, `create_time`, `update_time`,  `share_view`, `attribute`, `audit_status`, `static_file_url`, `is_delete`, `is_top`, `tags`, `is_original`, `is_hpr`, `is_vedio`, `vedio_url`, `vedio_cover_url`) VALUES (NULL, NULL,  '/article/20181116/content-819.html', '宋', '尿酸其实并不神秘', '痛风', NULL, '2018-11-16 15:22:35', NULL,  '0', NULL, '0', NULL, '1', '0', NULL, '0', '0', '1', NULL, NULL);

6.3.2 查看数据库已经生成浏览量

SELECT article_id,title,view_number FROM article_detail_info ORDER BY article_id desc LIMIT 1

生成一个条记录并且浏览量是292

以上是关于MySQL触发器概念原理与用法的主要内容,如果未能解决你的问题,请参考以下文章

研究人员发现喝咖啡有助于缓和痛风发病

mysql如何修改表结构

mysql 主从复制原理,概念,故障的检控/分析/处理

分析代码遇到的知识点

MySQL触发器的详细教学与综合分析

[Docker] Docker的概念原理与基本用法待完善