mysql触发器创建语法

最近有一个需求需要使用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 ;

 

转载于:https://my.oschina.net/songxinqiang/blog/737334

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值