文档章节

mysql触发器创建语法

阿信sxq
 阿信sxq
发布于 2016/08/24 17:43
字数 552
阅读 155
收藏 0

最近有一个需求需要使用mysql的触发器来实现,于是就开始编写触发器的创建sql语句,在网上找了一下创建触发器的说明,按照样子来编写,竟然说有语法错误,后来在mysql官方的文档资料里面找到了正确的语法结构,然后就创建成功了。

由于网上找到的大多数都是错误的,在这里就只是大概说一下网上的都是什么样子,看看就行了

create trigger test
before update on test
for each row
  update test set NEW.updateTime = NOW() where id=NEW.ID;
END

注意,最后有一个“END”,但是前面却没有“begin”,其实,出错就是这个end造成的。

我们访问mysql官方的文档,搜索“trigger”很容易就看到关于触发器的说明了

http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html

这个文档是关于5.7的,但是对于触发器创建语法来说,应该没有什么区别,在开头就给出了创建的语法举例

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)

由于这是一个简单的语句,所以没有更改行结束符,如果要更改行结束符也是很容易。

后面还有在需要执行很多句语句的时候的写法,这个时候就是需要“begin”和“end”的,它们是成对出现的

CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
  a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  b4 INT DEFAULT 0
);

delimiter |

CREATE TRIGGER testref BEFORE INSERT ON test1
  FOR EACH ROW
  BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
  END;
|

delimiter ;

然后我便携了我自己的创建触发器的sql语句,执行是OK的

DROP TABLE IF EXISTS `t_blog`;
CREATE TABLE `t_blog` (
    `b_id`              int(16)         NOT NULL    AUTO_INCREMENT,
    `title`             varchar(64)     NOT NULL,
    `content`           longtext        NOT NULL,
    `create_time`       datetime        NOT NULL,
    `tags`              varchar(64)     NOT NULL,
    `uni_uri`           varchar(64)     NOT NULL,
    PRIMARY KEY (`b_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000000001 DEFAULT CHARSET=utf8;

DROP TRIGGER IF EXISTS `tri_blog_default_create_time`;
DELIMITER ;;
CREATE TRIGGER `tri_blog_default_create_time`
BEFORE INSERT
ON `t_blog`
FOR EACH ROW set NEW.create_time = NOW();
;;
DELIMITER ;

 

© 著作权归作者所有

共有 人打赏支持
阿信sxq

阿信sxq

粉丝 226
博文 83
码字总数 73652
作品 1
成都
后端工程师
私信 提问
mysql-之触发器_已迁移

mysql 触发器 当发生某个事件(增删更查)时可以执行定义的sql语句 ===============总结 无情的分隔线 总结======================== 一、触发器作用 MySQL包含对触发器的支持。触发器是一种与...

鬼谷子灬
2016/06/29
14
0
MySQL的触发器

触发器—trigeer是数据库下用于监视数据改变的某种情况,并触发执行某种操作的一个功能,简单来说就是对某一张表符合某种条件的更改前或者后执行一段存储过程。在这里就简单的说一说在MySQL...

往事_Jim_遗
2018/01/08
0
0
mysql的存储过程 事件 触发器 视图 等的概念

内容来源: http://www.cnblogs.com/cac2020/p/6026511.html 表:里面存储的都是真实的数据视图:就是一个表或者多个表的一个映射,一般只做查询使用。比如你想要的数据存在两个表里,但你查...

JAVA码猿
2017/11/06
0
0
史上最简单的 MySQL 教程(四十一)「触发器」

案例:网上购物,根据生产订单的类型,商品的库存量对应的进行增和减。此案例涉及两张表,分别为订单表和商品表,下单时,商品表库存减少;退单时,商品表库存增加。如何实现? 触发器 触发器...

qq_35246620
2018/01/01
0
0
记一次由mysql触发器引发的故障

上周六到公司上班,刚坐下没多久,公司业务传过消息说,用户borrow表信息无法更新。查看网站报错如下: 报错信息表示是由于mysql的函数和触发器引起的,问了下公司开发,他们表示函数功能已经...

Tyrant0532
2018/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
1
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
4
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部