数据库基础<四)触发器

php中文网
发布: 2016-06-07 15:55:19
原创
1342人浏览过

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 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)
登录后复制
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号