天天看点

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;      

根据条件的判断

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

可以用来查询

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

这就是存储过程加事务

希望能给大家带来帮助!

谢谢浏览!