SQL介绍(三)触发器

主要参考:

书籍:

MySQL数据库应用从入门到精通(删库) 中国铁道出版社


SQL相关介绍合集: 

SQL介绍(一)创建数据库,表的操作(创建,更新,删除):https://blog.csdn.net/qq_41605114/article/details/97292616

SQL介绍(二)完整性约束,数据类型,索引(创建,更新,删除):https://blog.csdn.net/qq_41605114/article/details/97392269

SQL介绍(三)触发器:https://blog.csdn.net/qq_41605114/article/details/97794131

SQL介绍(四)单表查询:https://blog.csdn.net/qq_41605114/article/details/97934605

Qt:MySQL数据库总结(表的创建,插入,各种查询方式,删除,封装时需要的dll):https://blog.csdn.net/qq_41605114/article/details/90671791

 Qt封装调用MySQL的软件时所需的依赖项:https://blog.csdn.net/qq_41605114/article/details/86612264

 


 

目录

1,触发器介绍

2,创建触发器

2.1创建有一条执行语句的触发器

 2.2创建包含多条执行语句的触发器

3,查看触发器

4,删除触发器


1,触发器介绍

触发器(TRIGGER)是MySQL的数据库对象之一,该对象与编程语言中的函数非常类似,都需要声明、执行等。

但是触发器的执行不是由程序调用,也不是手工启动,而是由事件触发,激活从而实现执行的。

使用触发器的需求来源:

  • 在学生表中,拥有字段学生名字、字段学生总数,每当添加一条关于学生记录时,学生的总数就必须同时改变。
  • 在顾客信息表中拥有字段顾客名字,字段顾客的电话和字段顾客的地址缩写,每当添加一条关于顾客记录时,都需要检查电话号码格式是否正确,顾客地址缩写是否正确。

需要在表发生更改时,自动进行一些处理,这时即可使用触发器处理数据库对象,例如:对第一个实例,可以创建一个触发器对象,每次添加一条学生记录时,就执行一次计算学生总数的操作,这样即可保证每次添加一条学生记录后,学生总数与学生记录数保持一致,查看帮助文档,可以发现MySQL软件在触发如下语句时,就会自动执行所设置的操作。

  1. DELETE语句
  2. INSERT语句
  3. UPDATE语句

其他语句不会激活触发器,在具体应用中,之所以会经常使用触发器数据库对象,是由于该对象能够加强数据库表中数据的完整性约束和业务规则等。

2,创建触发器

2.1创建有一条执行语句的触发器

create trigger trigger_name
       BEFORE|AFTER trigger_EVENT
           ON TABLE_NAME FOR EACH ROW
              ROW_triggrt_STMT

 trigger_name参数表示所要创建的触发器名字,在具体创建触发器时,触发器标识符不能与已经存在的触发器重复。

除了上述要求外,建议触发器名命名(标识符)为trigger_XXX;

BEFORE和AFTER参数指定了触发器执行的时间;

TBALE_NAME参数表示触发事件操作表的名字;

FOR EACH ROW参数表示任何一条记录上的操作满足触发事件都会触发该触发器;

trigger_STMT参数表示激活触发器后被执行的语句。

执行SQL语句CREATE TRIGGER,在数据库company中存在两个表对象:部门表t_dept和日记表t_diary,创建触发器实现向部门表插入数据时,就会在插入之前,向日记表中插入当前时间:

CREARE TRIGGER tri_diarytime_special
   BEFORE INSERT
       ON t_dept FOR EACH ROW
           INSERT INTO t_diary VALUES(NULL,'t_dept',now());

 2.2创建包含多条执行语句的触发器

create trigger trigger_name
       BEFORE|AFTER trigger_EVENT
           ON TABLE_NAME FOR EACH ROW
              BEGIN
              ROW_triggrt_STMT
              END

 trigger_name参数表示所要创建的触发器名字,在具体创建触发器时,触发器标识符不能与已经存在的触发器重复。

除了上述要求外,建议触发器名命名(标识符)为trigger_XXX;

BEFORE和AFTER参数指定了触发器执行的时间;

TBALE_NAME参数表示触发事件操作表的名字;

FOR EACH ROW参数表示任何一条记录上的操作满足触发事件都会触发该触发器;

trigger_STMT参数表示激活触发器后被执行的语句

新加入的两个关键字:

在BEGIN和END之间,可以执行多个执行语句、之间用";"分号隔开。

DELIMITER $$
create trigger tri_diarytime
       AFTER INSERT
           ON t_dept FOR EACH ROW
              BEGIN
              INSERT INTO t_diary VALUES(NULL,'t_dept',now() );
              INSERT INTO t_diary VALUES(NULL,'t_dept',now() );
              END
              $$
DELIMITER;

首先通过"DELIMITER $$"语句设置结束符号为"$$",最后通过"DELIMITER;"

语句将结束符号"$$",变成默认结束符号";"。

3,查看触发器

当创建触发器时,常有“ERROR 1359(HY000):Trigger already existence”;

和其他相关的错误,之所以不能正确创建触发器,因为出去触发器已经存在外

MySQL对于具有相同触发程序动作时间和事件的给定表,不能有两个触发器。

在创建触发器之前。需要查看MySQL软件中是否已经存在该标识符的触发器。

SHOW TRIGGERS \G

4,删除触发器

DROP TRIGGER trigger_name

 

你可能感兴趣的:(Qt,数据库)