添加和修改寫在一塊兒了sql
能夠用id判斷添加和修改數據庫
和事務在一塊兒編碼併發
能夠讓代碼更嚴謹編碼
在這裏簡單的說一下事務的四大特性spa
事務四大特性之原子性:原子性是指事務是一個不可再分割的工做單位,事務中的操做要麼都發生,要麼都不發生
事務四大特性之一致性:一致性是指在事務開始以前和事務結束之後,數據庫的完整性約束沒有被破壞。這是說數據庫事務不能破壞關係數據的完整性以及業務邏輯上的一致性。
事務四大特性之隔離性: 多個事務併發訪問時,事務之間是隔離的,一個事務不該該影響其它事務運行效果
事務四大特性之持久性: 持久性,意味着在事務完成之後,該事務所對數據庫所做的更改便持久的保存在數據庫之中,並不會被回滾code
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;
接下來是刪除blog
刪除和正常的代碼區別不大事務
加上事務也是很是的清晰明瞭ip
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;
最後就是分頁查詢修改時的數據反填了ci
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;
根據條件的判斷
但是識別獲取的數據用來顯示
能夠用來查詢
也能夠用來修改時的數據反填
這就是存儲過程加事務
但願能給你們帶來幫助!
謝謝瀏覽!