zoukankan      html  css  js  c++  java
  • MySQL--增删改查分页存储过程以及事务

    添加和修改写在一起了

    可以用id判断添加和修改

    和事务在一起编码

    可以让代码更严谨

    在这里简单的说一下事务的四大特性

    事务四大特性之原子性:原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生
    事务四大特性之一致性:一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
    事务四大特性之隔离性: 多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果
    事务四大特性之持久性: 持久性,意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚

    create PROCEDURE p_AddOrUpd(cid int,cname VARCHAR(200),cnum int,ctype VARCHAR(200),cbirth VARCHAR(200),cmoney VARCHAR(200),out code int)
    BEGIN
    DECLARE t_error int default 0;
    DECLARE CONTINUE HANDLER for SQLEXCEPTION set t_error=1;
    START TRANSACTION;
    IF cid=0/*判断*/
    THEN/*添加*/
    insert into vip(Name,PhoneNum,VipType,Birth,Money) VALUES (cname,cnum,ctype,cbirth,cmoney);
    ELSE/*修改*/
    update vip set Name=cname,PhoneNum=cnum,VipType=ctype,Birth=cbirth,Money=cmoney where Id=cid;
    END IF;
    
    /*错误回滚*/
    if t_error=1
    THEN
    set code=1;ROLLBACK;
    ELSE
    set code=0;COMMIT;
    end IF;
    END
    
    drop PROCEDURE p_AddOrUpd
    
    CALL p_AddOrUpd(0,'1',1,'1','1','1',@code);/*调用存储过程*/
    select @code;

    接下来是删除

    删除和正常的代码区别不大

    加上事务也是非常的清晰明了

     1 create PROCEDURE p_delete(cid int,out code int)
     2 BEGIN
     3 DECLARE t_error int default 0;
     4 DECLARE CONTINUE HANDLER for SQLEXCEPTION set t_error=1;
     5 START TRANSACTION;
     6 /*删除*/
     7 delete from vip where Id=cid;
     8 
     9 /*错误回滚*/
    10 if t_error=1
    11 THEN
    12 set code=1;ROLLBACK;
    13 ELSE
    14 set code=0;COMMIT;
    15 end IF;
    16 END
    17 
    18 
    19 CALL p_delete(1,@code);
    20 select @code;

    最后就是分页查询修改时的数据反填了

    create PROCEDURE p_pager(pageindex int,pagesize int,out pagecount int,out datacount int,cid int,cname VARCHAR(200),ctype VARCHAR(200))
    BEGIN
    /*获取查询数据*/
    set @sqlpager=concat('select * from vip where 1=1',
    IF(cid=0,'',concat(' and Id=cid')),
    if(cname='','',concat(' and Name like "%',cname,'%"')),
    IF(ctype='','',concat(' and VipType="',ctype,'"')),
    ' limit ',(pageindex-1)*pagesize,pagesize);
    
    PREPARE s1 from @sqlpager;
    EXECUTE s1;
    
    /*获取总条数数*/
    set @sqlcount=concat('set @datacount=(select count(*) from vip where 1=1',
    IF(cid=0,'',concat(' and Id=cid')),
    if(cname='','',concat(' and Name like "%',cname,'%"')),
    IF(ctype='','',concat(' and VipType="',ctype,'"')),')');
    
    PREPARE s2 from @sqlcount;
    EXECUTE s2;
    
    /*总页数*/
    set pagecount=(@datacount*1.0/pagesize);
    
    END
    
    drop PROCEDURE p_pager;
    
    CALL p_pager(1,3,@pagecount,@datacount,0,'','');
    select @pagecount,@datacount;

    根据条件的判断

    可是识别获取的数据用来显示

    可以用来查询

    也可以用来修改时的数据反填

    这就是存储过程加事务

    希望能给大家带来帮助!

    谢谢浏览!

  • 相关阅读:
    stm32 SPI DMA读取ADS8345数据
    Minigui3.0.12完美安装,折腾了一天。终于看到了
    qvfb2的安装,在ubuntu10.4上安装成功
    户口从杭州人才市场迁移到武汉万科魅力之城的过程
    禁止minigui 3.0的屏幕保护
    想穿越回到儿时记录那些幸福
    TIM2定时闪灯程序。。。
    关于minigui的皮肤控件无法显示问题
    插件框架内核的设计
    用“序列图”描述技术方案
  • 原文地址:https://www.cnblogs.com/jian1125/p/10642631.html
Copyright © 2011-2022 走看看