PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 数据库 > MySQL教程 > 正文

    Mysql触发器实例教程(创建 删除 修改 查看)

    作者:w634381967来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:1.创建触发器的语句:CREATE TRIGGER <触发器名称> <--{ BEFORE | AFTER }{ INSERT | UPDATE | DELETE }ON <表名称>FOR EAC...
    1.创建触发器的语句:
    CREATE TRIGGER <触发器名称> <--
    { BEFORE | AFTER }
    { INSERT | UPDATE | DELETE }
    ON <表名称>
    FOR EACH ROW
    <触发器SQL语句>
    -触发器

     
    复制代码 代码如下:
    --create trigger 名字
    --on 表名
    --触发动作
    --for/after insert/update/delete
    --as
    --t-sql
    select * from shop_jb
    --insert into shop_xs values(6,4000,1,GETDATE(),3)
    -- update shop_jb set stock=stock-1 where id=6
    --创建触发器
    create trigger tri1
    on shop5_xs
    after insert
    as
    update shop3_jb set stock=stock-1 where id=6
    ---触发器更新完之后,要查看表
    create trigger tri3
    on shop3_jb
    for update
    as
    select * from shop3_jb
    update shop3_jb set spec='sp-Z99' where id=2
    drop trigger tri1
    ---用存储过程来实现,更新完之后,要查看表
    alter proc proc1
    as
    update shop3_jb set spec='sp-111' where id=2
    select * from shop3_jb
    exec proc1
    ---查看表的触发器
    exec sp_helptrigger 表名
    ---查看表的内容
    exec sp_helptext 触发器名
    ---删除触发器
    drop trigger 触发器名
    提示:你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。

    实例:

    example1:

    创建表tab1:
     

     
    复制代码 代码如下:
    DROP TABLE IF EXISTS tab1;
    CREATE TABLE tab1(
    tab1_id varchar(11)
    );
    创建表tab2:

    DROP TABLE IF EXISTS tab2;
    CREATE TABLE tab2(
    tab2_id varchar(11)
    );
    创建触发器:t_afterinsert_on_tab1

    作用:增加tab1表记录后自动将记录增加到tab2表中
     

     
    复制代码 代码如下:
    DROP TRIGGER IF EXISTS t_afterinsert_on_tab1;
    CREATE TRIGGER t_afterinsert_on_tab1
    AFTER INSERT ON tab1
    FOR EACH ROW
    BEGIN
    insert into tab2(tab2_id) values(new.tab1_id);
    END;
    测试一下:
     
    复制代码 代码如下:
    INSERT INTO tab1(tab1_id) values('0001');
    看看结果估计两个表都有相同数据!

    ----------练习--------
     

     
    复制代码 代码如下:
    create trigger tri1
    on shop3_jb
    after insert
    as
    select * from inserted
    insert into shop3_jb values('洗衣机','aa',200,500,getdate())
    select * from shop3_jb
    exec sp_helptrigger shop3_jb
    exec sp_helptext tri1
    drop trigger tri1
    create trigger tri2
    on shop3_jb
    after delete
    as
    select * from deleted
    delete from shop3_jb where namel='笔记本'
    select * from shop3_jb
    ---查看表的触发器
    exec sp_helptrigger 表名
    ---查看表的内容
    exec sp_helptext 触发器名
    ---删除触发器
    drop trigger 触发器名
    select * from shop5_xs
    select * from shop3_jb
    补充语法

    触发器 语法

    3.1  CREATE TRIGGER trigger_name trigger_time trigger_event

      ON tbl_name FOR EACH ROW trigger_stmt
      trigger_time是触发程序的动作时间。它可以是BEFORE或AFTERtrigger_event指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:

    · INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。
    · UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。
    · DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。
    3.2 可能遇到的问题
    如果你在触发器里面对刚刚插入的数据进行了 insert/update, 会造成循环的调用.

    如:

     create trigger test before update on test for each row update test set NEW.updateTime = NOW() where id=NEW.ID; END

    应该使用set:

    create trigger test before update on test for each row set NEW.updateTime = NOW(); END

    3.3 触发器 与存储过程

    触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL

     (允许存储程序通过参数将数据返回触发程序)。 
    而存储过程  可以接受参数,将结果范围给应用程序

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-35-1270-1.html
    相关热词搜索: