• 40 触发器 事务 储存过程


    一.触发器 trigger


    对用户某张表的数据进行 增删改 操作时的前后行为。

    1.创建触发器:(before/after insert/delete on 表名 for each row)

    格式:
    create trigger 触发器名字 before insert on 表名 for each row
    begin
    ..... 这里面写触发器要的的mysql事情
    end


    例:
    create table cmd(id int primary key auto_increment,
    use char(32),priv char(10),cmd char(64),
    sub_time datetime,success enum("yes","no"));

    crate table errlog(id int primary key auto_increment,
    err_cmd char(64),err_time datatime);


    delimiter //
    create trigger tri_cmd after insert on table cmd for each row
    begin
    if new.success="no" then
    insert into errlog(err_cmd,err_time) values(new.cmd,new.sub_time);
    end if;
    end //
    delimiter ;

    2.删除触发器: drop trigger 触发器的名字

    二. 事务 transaction

    要么同时成功要么同时失败

    start transaction ;
    update user set balance =900 where name="wsb";
    update user set balance =1010 where name="chao";
    update user set balance=1090 where name="ysb";
    rollback;#回滚
    commit; #提交才能生效

     

    三.储存过程

    1.创建简单储存过程
    delimiter //
    create procedure p()
    begin
    select * from blog;
    insert into blog(name,sub_time) values("xx",now());
    end //
    delimiter;

    2. in传参 或out传参 或inout
    create procedure p(
    in n1 int,
    out n2 int); #该参数主要是通过存储过程能得到一个状态参数

    3.调用 call p()

    4. out 传参时,set @res=3 此参数的传入值做占位用, 存储过程很会改变该参数值,
    得到返回值,返回值需要用 select @res;来得到 ,外部调用的时候 call p(@res)。

    5.删除储存过程 drop procedure p;


    四. 事务和存储过程的结合


    delimiter //;
    create procedure p1(out res int);
    begin
    declare exit handler for sqlexception
    begin
    --error #对错误的处理
    set res =1; #将 out 返回值该为1,1表示出错
    rollback;#回滚事务
    end;

    declare exit handler for sqlwarning
    begin
    --warning #声明出现警告信息之后的操作
    set res=2;
    rollback;
    end;

    start transaction;
    insert into blog(name,sub_time) values("yyy",now());
    commit;

    --success
    set res=0; #0 代表成功

    end //
    delimiter ;

    set @res=123;
    call p1(@res); #调用存储过程
    select @res; #查看返回值

  • 相关阅读:
    OpenGL相关文章
    gluOrtho2D与glViewport
    QOpenGLWidget
    openGL中的gl,glu,glut
    QT对话框
    QT布局
    QT容器类
    [POJ1014]Dividing(二进制优化多重背包)
    [Codefroces401D]Roman and Numbers(状压+数位DP)
    [HDU6326]Monster Hunter(贪心)
  • 原文地址:https://www.cnblogs.com/knighterrant/p/10120500.html
Copyright © 2020-2023  润新知