mysql触发器学习笔记

  触发器是一个特殊的存储过程,不同的是执行存储过程需要用call进行调用,而触发器的执行不需要被调用,只要当一个预定义的事件发生时,就会被mysql自动调用

  创建触发器的语法

  

create trigger trigger_name trigger_time trigger_event
    on table_name for each row trigger_stmt

  其中trigger_name为创建的触发器的名称,这个是由自己进行定义的

    trigger_time是触发时机可选值有before,after

    trigger_event是触发事件(insert,delete,update)

    table_name是建立触发器的表名

    trigger_stmt是触发程序体

触发器的使用示范

 建立表

create table account(
    acct_num int,
    amount decimal(10,2)
);

 创建触发器

set @sum = 0;
create trigger ins_sum1 after insert on account 
    for each row set @sum = @sum + new.amount;

@sum表示用户变量,使用set语句为其赋值,用户变量与连接有关。

触发器ins_sum的作用是向数据表中添加一个数据之前,对新插入的数据的account的字段进行求和计算

创建一个含多各执行语句的触发器

#建立相关数据表
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 $
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);
    insert into test4(a4) values
    (0),(0),(0),(0),(0),(0),(0),(0);
    insert into test1(a1) values
    (1),(3),(1),(7),(1),(8),(4),(4);
    select * from test1;
    select * from test2;
    select * from test3;
    select * from test4;
    insert into test5(a4) values
    (0),(0),(0),(0),(0),(0),(0),(0);

 

posted @ 2021-03-15 16:36  zou-ting-rong  阅读(96)  评论(0编辑  收藏  举报