mysql触发器(TRIGGER)

触发器:在执行某个操作时触发一系列的操作。
关键语法: 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@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8mb4_general_ci
1 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拒绝插入。所以下面我将修改触发器。
#修改触发器--删除重建。这很mysql
mysql> 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 ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值