MySQL触发器

最近在使用mysql,刚刚接触触发器,在网上找了很多的触发器语句,有一些只有触发器没有表,我的编程习惯不好,出了很多低级错误,现在讲我对于触发器的一些基础知识记录下来。很简单,我在网上查询加上自己实际操作用了不到3个小时,一些基本的操作就会了,希望帮到和我一样的菜鸟。另外这是mysql的触发器,语法和其他数据库应该有些不同;第5部分的红色是一些注意事项,有部分是我走过的坑,请注意了。

1 创建两个表(我使用的是Navicat连接的数据库,SQL 语句都一样)

数据库叫做"studb"

1首先创建表‘s’,当我对另外一个表‘scd7’操作时,会对这个表进行操作(触发器)

CREATE TABLE "s" (
  "a" char(10) COLLATE utf8_bin NOT NULL DEFAULT '',
  "b" char(10) COLLATE utf8_bin DEFAULT NULL,
  "c" int(10) DEFAULT NULL,
  "d" int(10) DEFAULT NULL,
  PRIMARY KEY ("a")
);

 

2 创建表‘scd7’ 

CREATE TABLE "scd7" (
  "Sno" char(9) COLLATE utf8_bin NOT NULL DEFAULT '',
  "Cno" char(4) COLLATE utf8_bin NOT NULL DEFAULT '',
  "Grade" int(11) DEFAULT NULL,
  PRIMARY KEY ("Sno")
);

2 开始创建触发器

第一个触发器:

CREATE TRIGGER `credit7` 
BEFORE UPDATE ON `scd7` 
FOR EACH ROW 
BEGIN
INSERT into s VALUES(New.Sno,New.Cno,4,6);
END;

解释:创建名字叫做‘credit7’的触发器

CREATE TRIGGER `credit7` 

解释:这个触发器事件是发上在更新scd7’之前的

 BEFORE UPDATE ON `scd7`

解释:

FOR EACH ROW:触发器是行级

 BEGIN 和END是触发器事件的结束开始,

insert:语句是插入到‘s’的语句

      New.Sno:是你要插入的Sno的值

     New.Cno:是你要插入的Cno的值

    4和6 就不用说了,插入对应列的值

FOR EACH ROW 
BEGIN
INSERT into s VALUES(New.Sno,New.Cno,4,6);
END;

3 接下来运行对表‘scd7’进行插入,然后在进行修改,就会出现‘s’被修改了。就不一一截图了

4查询与删除触发器的语句

删除触发器:数据库名称.触发器名称

DROP TRIGGER FROM studb.crite7

查询触发器:是TRIGGERS(有S),查询的数据库中的触发器

SHOW TRIGGERS from studb

5一些其他触发器

CREATE TABLE "scd1" (
  "Sno" char(9) COLLATE utf8_bin NOT NULL DEFAULT '',
  "Cno" char(4) COLLATE utf8_bin NOT NULL DEFAULT '',
  "Grade" int(11) DEFAULT NULL,
  PRIMARY KEY ("Sno","Cno")
);
CREATE TRIGGER `TRIGGER1` BEFORE UPDATE ON `scd1` FOR EACH ROW 
BEGIN
DECLARE oldGrade INT(20);
set oldGrade=(SELECT Grade FROM scd1 WHERE Sno=NEW.Sno);
IF New.Grade>oldGrade THEN
INSERT into s VALUES(NEW.Sno,NEW.Cno,8,6);
END IF;
END

注意上图

1 这个是建立表'scd1'

2 BEGIN与EDN之间的语句,是分号隔开的(特别是END IF后面的分号,最开始忘了写了,一直报错) 

3  上面触发器的意思是:在修改‘scd1’时,当修改的Grade列数据,大于修改前的Grade数据,向‘s’插入语句。。。

4 触发器只能删除,不能修改

5 请注意各个数据列的类型

6 由于都是向's'表操作,请注意不要让's'表的主健重复了,不然会报错,插入失败,这也可以在数据库操作时做一些有趣的设定。

 

CREATE TRIGGER `TRIGGER1` BEFORE INSERT ON `scd1` FOR EACH ROW 
BEGIN
set NEW.Grade=27;
END

 这个触发器的作用是,当要插入'scd1'时,将新的Grade设置为27,也就是做,你执行的插入语句,成功后,‘scd1’表中的Grate值会被默认为27

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值