2011-01-27 125 views
0

我想創建一個單一按鈕的代碼,它將執行兩個操作之一,如果用戶當前沒有記錄,它將添加到數據庫,如果用戶有更新用戶的記錄記錄已經。我這樣做了:是否可以聲明到mysql查詢?

if() { 
    mysql_query("INSERT INTO table..."); 
} 
else { 
    mysql_query("UPDATE table SET..."); 
} 

這可能嗎?

回答

2

是的,你寫的會起作用。如果你有辦法知道是否已經存在一行或者沒有爲這些代碼進行額外的查詢,那麼就按照你寫的那樣完成。

但是,如果您計劃從表格中首先檢查是否存在某一行,然後有條件地INSERTUPDATE,那麼您將執行的查詢次數超過必要的次數。

這將是更好的之一:

  1. 對錶的主鍵或其他約束防止重複INSERT秒。然後發出INSERT ... ON DUPLICATE KEY UPDATE查詢。這將嘗試到INSERT該行,並且如果它是重複的,則自動執行指定的UPDATE而不是該行。

  2. 發出UPDATE查詢並檢查mysql_affected_rows以查看它是否更新了現有的行。如果不是,則發出INSERT查詢以創建新行。

哪一個更合適取決於您的應用。

+0

我喜歡`UPDATE`和`affected_rows` - 少一個查詢。只有一個問題,`_affected_rows`也將返回0,如果它不需要更新任何東西(記錄存在,但數據是相同的) – 2011-01-27 10:17:32

1

如果您已正確設置唯一密鑰,則應使用REPLACE,以便您可以刪除if

REPLACE INTO table VALUE (...); 

請注意,這是一個MySQL擴展,因此不能移植到其他數據庫。

0

是的,這是可能的

首先寫一個查詢來檢查記錄是否已經存在或不存在。

1

是的,你可以嘗試插入,然後如果失敗嘗試更新。

但是,您可以使用MYSQL sql「REPLACE」關鍵字,該關鍵字將插入新記錄(如果不存在)或刪除現有記錄並插入新記錄(如果存在)。

您也可以使用INSERT ...對重複密鑰更新語法 (這裏解釋 - Link to MYSQL ref這似乎是最接近適合您的要求