我这么久,才弄清楚mysql的触发器、视图、索引,受益匪浅

在满足对某张表中数据的增、删、改的情况下,自动触发的功能称之为触发器 。视图就是通过查询得到一张虚拟表,然后将标结果保存下来,下次直接使用即可 。索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构 。

我这么久,才弄清楚mysql的触发器、视图、索引,受益匪浅

文章插图
 
触发器触发程序(trigger)是一种特殊的存储过程,它的执行不是由程序调用,也不是手工启 动,而是通过事件进行触发来被执行的,当对一个表进行操作(insert,delete,update)时就会激活它并执行 。触发程序经常用于加强数据的完整性约束和业务规则 等 。触发程序类似于约束,但比约束更灵活,具有更精细和更强大的数据控制能力 。触发 程序的优点如下 。
⑴触发程序的执行是自动的 。当对触发程序相关表的数据做出相应的修改后立即执行 。
⑵触发程序可以通过数据库中相关的表进行层叠修改另外的表 。
⑶触发程序可以实施比 foreignkey 约束、check 约束更为复杂的检查和操作 。
创建
create trigger < 触发程序名称>
 
{before | after}
{insert | update | delete}
on < 表名> for each row
< 触发程序 SQL 语句>
详细说明:
? ⑴表的拥有者即创建表的用户可以在表上创建触发程序,而且一个表上可以创建多个触发程序 。
? ⑵create trigger<触发程序名称>:创建一个新触发程序,并指定触发程序的名称 。
? ⑶{before | after}:用于指定在INSERT、UPDATE或 DELETE语句执行前触发还是在语句执行后触发 。
? ⑷{insert | update | delete} 。
? INSERT:将新行插入表时激活触发程序,例如,通过 INSERT、LOADDATA 和 REPLACE语句 。
? UPDATE:更改某一行时激活触发程序,例如,通过 UPDATE 语句 。
? DELETE:从表中删除某一行时激活触发程序,例如,通过 DELETE 和REPLACE语句 。
? ⑸on<表名>:用于指定响应该触发程序的表名 。必须引用永久性表,不能将触发程序与 TEMPORARY 表或视图关联起
来 。
? ⑹for each row:触发程序的执行间隔,for each row 通知触发程序每隔一行执行一次动作,而不是对整个表执行一次 。
? ⑺<触发程序 SQL 语句>:触发程序要执行的 SQL语句,如果该触发程序要执行多条 SQL 语句,要将多条语句放在
BEGIN…END 块中 。
? ⑻触发程序名称存在于方案的名称空间内,这意味着在 1 个方案中,所有的触发程序必须具有唯一的名称,位于不同方
案中的触发程序可以具有相同的名称 。
注意对于具有相同触发程序动作时间和事件的给定表,不能有两个触发程序 。例如,对于 某一表,不能有两个 before update 触发程序 。但可以有 1个 before update 触发程序 和 1个 before insert触发程序,或 1个 before update 触发程序和 1个 after update 触发程序 。
示例:基于学生表和班级表
添加一个学生,数量班级的学生数量自动增加
我这么久,才弄清楚mysql的触发器、视图、索引,受益匪浅

文章插图
 
限制学生的年龄段
我这么久,才弄清楚mysql的触发器、视图、索引,受益匪浅

文章插图
 
删除班级后将班级下面所有的学生删除
我这么久,才弄清楚mysql的触发器、视图、索引,受益匪浅

文章插图
 
查看show triggers show triggers [from db_ name] [like expr]在系统表中查看
已定义好的触发程序的信息都存储在 INFORMATION_SCHEMA 库中的 TRIGGERS 表中,可 以通过查看该表中的信息获取某个触发程序的信息
我这么久,才弄清楚mysql的触发器、视图、索引,受益匪浅

文章插图
 
删除MySQL删除触发程序的语法如下 。
drop {database | schema} [if exists] trigger_ name视图视图(View)是一个由查询语句定义数据内容的表,表中的数据内容就是 SQL查询语句的 结果集,行和列的数据均来自 SQL查询语句中使用的数据表 。但之所以说视图是虚拟的 表,是因为视图并不在数据库中真实存在,而是在引用视图时动态生成的 。
优势
? 使用视图简单,操作视图和操作数据表完全是两个概念,用户不用理清数据表之间复杂的逻辑关系,而且将经常使用的
SQL 数据查询语句定义为视图,可以有效地避免代码重复减少工作量 。


推荐阅读