Re: [SQL ] 請問if() insert else update

看板Database作者時間14年前 (2009/08/21 17:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
自己回答自己 這裡寫成stored procedure / mysql ------------------------------------------------- DELIMITER $$ CREATE PROCEDURE p_test2 (in_id varchar(30),in_length int(10),in_weight int(10),OUT ret_flag INT) begin update user_profile set p_length=in_length and p_weight=in_weight where id=in_id; set ret_flag=1; if FOUND_ROWS()=0 then insert into user_profile(id,p_length,p_weight) values (in_id,in_length,in_weight); set ret_flag=2; end if; commit; end$$ DELIMITER ; ------------------------------------------------- 推薦SQLyog,直接創建一個預存程序, 寫完記得按F9執行,才會真正寫入。 寫入成功會在左手邊看到一個剛剛命名的齒輪。 以下是php部分 <? $id='888'; $length=180; $weight=70; /* 連結資料庫 */ $call_sp="call p_test2($id,$length,$weight,@flag)"; mysql_query($call_sp,$資料庫連結); //-------這時候@flag變數會留在mysql裡面 $getFlag="select @flag"; $getResult=mysql_query($getFlag,$資料庫連結); $row=mysql_fetch_array['$getReturn']; echo $row['@flag']; //-----1為update舊資料成功 2為原本沒資料,insert成功 ?> 至於為何沒有先select之後再決定update或insert 是因為效率問題 select table之後再判斷浪費了處理時間 有個好方法,邏輯是 不管table有沒有資料都先update 如果無法update,系統會給回應 這時候成功就執行完畢 失敗的話 //if FOUND_ROWS()=0 //這裡用 ROW_COUNT()=0也行 但限於mysql版本(v5.0.1)以上 我們就知道沒資料,這時候就insert了 簡單說,就是霸王硬上弓的意思XD ※ 引述《imntu ()》之銘言: : 請問如果我想把一個人(id=8888)加入資料庫裡面 : 但是我不知道是不是以前已經有過他的資料 : 所以我先查一下是否有這人select count(*) : 如果沒有的話(@result=0) : 就insert : 如果已經有就update : 代碼如下,mysql : ------------------------------------------- : set @result=(select count(*) from user_profile where id='8888'); : if @result= 0 : then (insert user_profile (p_length,p_weight) values ('180','70')); : else (update user_profile set p_length='180' where p_weight='70'); : end if : ------------------------------------------- : 但是一直出現錯誤 Error Code : 1064 : 語法錯誤,但是找遍書籍和網路,找不到解法。 : 請問有人知道錯在哪裡嗎? : ---- : 剛爬文之後成功。 : insert user_profile set p_length='180',p_weight='70',id='8888' : ON DUPLICATE KEY UPDATE p_length='180',p_weight='70'; : 但是if...else到底錯在哪裡?? : 想不通。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.74.155.210 ※ 編輯: imntu 來自: 210.74.155.210 (08/21 18:26)
文章代碼(AID): #1AZcy5PL (Database)
文章代碼(AID): #1AZcy5PL (Database)