mysql触发器(TRIGGER)

来源:互联网 发布:淘宝背景教程 编辑:程序博客网 时间:2024/06/06 05:31

触发器:在执行某个操作时触发一系列的操作。
关键语法: create trigger trigger_name [before|after] [insert|delete|update] table_name for each row sql

tirgger_name: 触发器名称、[xx|xx]:xx或者xx、table_name 触发器所关联的表名、sql:sql语句。

触发器如果需要触发执行多条sql语句 需要在 格式应更改为……for each row begin sql end

使用多条sql语句时每条sql用;结尾,为了防止冲突 我们需要使用 delimiter sql 当然其它的符号也可以。 在编写完成之后再使用 delimiter ; 将结束符变更回 ; 。

具体sql:

#创建一个单条sql的触发器mysql> create trigger tri_test before insert on test1 for each row insert into test2(`name`,c_id) values('lisi',0);Query OK, 0 rows affected (0.00 sec)#查看触发器 ;结尾是用表格的形式展示的 应为过长,会导致布局混乱 所以我用\G结束。#触发器,外键等内容在系统数据库information_schema中都有相对应的表,例如触发器的表就是 trigger表。所以我们也可以通过查询information_schema下的tigger表进行查看。mysql> show triggers\G*************************** 1. row ***************************             Trigger: tri_test               Event: INSERT               Table: test1           Statement: insert into test2(`name`,c_id) values('lisi',0)              Timing: BEFORE             Created: NULL            sql_mode:              Definer: root@localhostcharacter_set_client: utf8collation_connection: utf8_general_ci  Database Collation: utf8mb4_general_ci1 row in set (0.00 sec)#插入一条数据insert into test1(`name`,create_time) values('trigger',now());ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`test2`, CONSTRAINT `fk_id` FOREIGN KEY (`c_id`) REFERENCES `test1` (`id`) ON DELETE CASCADE)mysql> show triggers tri_test;#注意看上面的错误提示, 是因为我以前对test2的c_id做了外键限制,在test1中没有id =0的数据导致test2拒绝插入。所以下面我将修改触发器。#修改触发器--删除重建。这很mysqlmysql> drop trigger tri_test;Query OK, 0 rows affected (0.00 sec)#重新创建一个触发器 这次是多条sql的。#首先更改结束符为 $mysql> delimiter $#创建触发器mysql> create trigger tri_test after insert on test1 for each row     -> begin     -> insert into test2(name,c_id) values('trigger1',1);    -> insert into test2(name,c_id) values('trigger2',2);    -> end $Query OK, 0 rows affected (0.00 sec)#将结束符改回 ;mysql> delimiter ;
原创粉丝点击