• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

数据库基础<四)触发器

mysql 搞代码 4年前 (2022-01-09) 43次浏览 已收录 0个评论

1、概念 触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程,一旦定义,任何用户 对表的增、删、改操作均由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制。 2、定义触发器 create trigger 触发器名 before|after 触发事件

1、概念

触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程,一旦定义,任何用户

对表的增、删、改操作均由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制。

2、定义触发器

create trigger before|after on

for each row|statement [when ]

触发事件:可以是 insert、delete 或 update ,可以是几个事件的组合,用or连接

update 后面还可以有 of

触发器类型:分为 for each row(行级触发器)和 for each statement(语句级触发器,触发一次)

触发动作体:可以是一个过程块或是对已创建存储过程的调用,如果是行级触发器,可以在过程体中

使用 new 和 old 引用 update/insert 事件之后的新值和 update/delete 事件之前的旧值

3、激活触发器

同一个表上的多个触发器激活时的执行顺序:

1)执行该表上的 before 触发器

2)激活触发器的 SQL 语句

3)执行该表上的 after 触发器

查看触发器是否被激活:show triggers

4、删除触发器

drop trigger on

5、mysql 触发器实例

CREATE TABLE test1(a1 INT);CREATE TABLE test2(a2 INT);CREATE TABLE test3(a3 INT NOT<strong style="color:transparent">本文来源gaodai#ma#com搞@@代~&码*网/</strong> 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 ; INSERT INTO test3 (a3) VALUES   (NULL), (NULL), (NULL), (NULL), (NULL),   (NULL), (NULL), (NULL), (NULL), (NULL); INSERT INTO test4 (a4) VALUES   (0), (0), (0), (0), (0), (0), (0), (0), (0), (0);如果将下述值插入表test1,如下所示:mysql> INSERT INTO test1 VALUES     -> (1), (3), (1), (7), (1), (8), (4), (4);Query OK, 8 rows affected (0.01 sec)Records: 8  Duplicates: 0  Warnings: 0那么4个表中的数据如下:mysql> SELECT * FROM test1;+------+| a1   |+------+|    1 ||    3 ||    1 ||    7 ||    1 ||    8 ||    4 ||    4 |+------+8 rows in set (0.00 sec) mysql> SELECT * FROM test2;+------+| a2   |+------+|    1 ||    3 ||    1 ||    7 ||    1 ||    8 ||    4 ||    4 |+------+8 rows in set (0.00 sec) mysql> SELECT * FROM test3;+----+| a3 |+----+|  2 ||  5 ||  6 ||  9 || 10 |+----+5 rows in set (0.00 sec) mysql> SELECT * FROM test4;+----+------+| a4 | b4   |+----+------+|  1 |    3 ||  2 |    0 ||  3 |    1 ||  4 |    2 ||  5 |    0 ||  6 |    0 ||  7 |    1 ||  8 |    1 ||  9 |    0 || 10 |    0 |+----+------+10 rows in set (0.00 sec)

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:数据库基础&lt;四)触发器

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址