我想創建一個單一按鈕的代碼,它將執行兩個操作之一,如果用戶當前沒有記錄,它將添加到數據庫,如果用戶有更新用戶的記錄記錄已經。我這樣做了:是否可以聲明到mysql查詢?
if() {
mysql_query("INSERT INTO table...");
}
else {
mysql_query("UPDATE table SET...");
}
這可能嗎?
我想創建一個單一按鈕的代碼,它將執行兩個操作之一,如果用戶當前沒有記錄,它將添加到數據庫,如果用戶有更新用戶的記錄記錄已經。我這樣做了:是否可以聲明到mysql查詢?
if() {
mysql_query("INSERT INTO table...");
}
else {
mysql_query("UPDATE table SET...");
}
這可能嗎?
是的,你寫的會起作用。如果你有辦法知道是否已經存在一行或者沒有爲這些代碼進行額外的查詢,那麼就按照你寫的那樣完成。
但是,如果您計劃從表格中首先檢查是否存在某一行,然後有條件地INSERT
或UPDATE
,那麼您將執行的查詢次數超過必要的次數。
這將是更好的之一:
對錶的主鍵或其他約束防止重複INSERT
秒。然後發出INSERT ... ON DUPLICATE KEY UPDATE
查詢。這將嘗試到INSERT
該行,並且如果它是重複的,則自動執行指定的UPDATE
而不是該行。
發出UPDATE
查詢並檢查mysql_affected_rows
以查看它是否更新了現有的行。如果不是,則發出INSERT
查詢以創建新行。
哪一個更合適取決於您的應用。
是的,這是可能的
首先寫一個查詢來檢查記錄是否已經存在或不存在。
可以使用INSERT ... ON DUPLICATE KEY UPDATE
語法,如:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
是的,你可以嘗試插入,然後如果失敗嘗試更新。
但是,您可以使用MYSQL sql「REPLACE」關鍵字,該關鍵字將插入新記錄(如果不存在)或刪除現有記錄並插入新記錄(如果存在)。
您也可以使用INSERT ...對重複密鑰更新語法 (這裏解釋 - Link to MYSQL ref這似乎是最接近適合您的要求
是的,它是可能的,它會工作
我喜歡`UPDATE`和`affected_rows` - 少一個查詢。只有一個問題,`_affected_rows`也將返回0,如果它不需要更新任何東西(記錄存在,但數據是相同的) – 2011-01-27 10:17:32