触发器

作者: 蘋果_283e | 来源:发表于2017-03-19 19:04 被阅读0次

    同一动作不能创建两个触发器

    触发器:trigger, 枪击,扳击,引线的意思 一触即发,

    作用: 监视某种情况并触发某种操作

    触发器:

    能监视: 增,删,改  触发操作: 增,删,改

    查看触发器 show triggers;

    after insert触发器 before insert触发器 after delete触发器 after update触发器

    before 和after的区别

    after是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作;也就是说先插入订单记录,再更新商品的数量;

    before是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的操作;

    //删除触发器(注意外键约束)drop trigger 触发器名称;

    查看触发器show triggers;

    //delimiter 定义mysql中的分隔符
    在mysql中,';'标志着sql语句的结束,但是在触发器要执行的Sql语句中要使用到';',所有需要重新定义分隔符
    delimiter //  敲//才执行Sql
    //触发器(trigger)
    定义:当执行一个动作时,引起了其他一系列的操作。

    //创建学生数量表
    create table st_count(
     number int(11) not null default 0
    );
    //创建触发器语法
    create trigger 触发器名称
    触发的时机 //before,after
    触发的动作 //insert,update,delete
    on 引起触发器的表名称
    for each row
    执行的sql语句;

    //执行单条sql语句的触发器
    //在student表中删除一条数据之后,st_count的学生数量自动-1
    create trigger tri_after_del
    after delete
    on student for each row
    update st_count set number = number -1;

    //student执行delete操作
    delete from student where stid = 7;

    //执行多条sql语句的触发器
    //在student表中存入一条数据之后,
    (1)st_count的学生数量自动+1
    (2)score自动存入学生一条成绩
    create trigger tri_after_insert2
    after insert
    on student for each row
    begin
     update st_count set number = number+1;
     insert into score values(8,1,100);
    end
    ////调用:student执行Insert操作
    insert into student values(9,'喵喵',22,'女','12345678909','2012-12-1','江苏');

    insert into student (name,age,sex,tel,joinTime,local)values('喵喵',22,'女','12345678909','2012-12-1','江苏');
    使用begin ...end结构,可以定义一个执行多条sql语句的触发器

    相关文章

      网友评论

          本文标题:触发器

          本文链接:https://www.haomeiwen.com/subject/jbkvnttx.html