我正在開發一個web應用程序項目,並且有一個相當大的html表單,需要將其數據存儲在一個表中。表單和插入已完成,但我的客戶希望能夠將保存的數據加載回HTML表單,並且能夠更改它,再次,這沒有問題,但是當我要更新時遇到了一個問題,只要保持插入查詢,然後刪除舊行,如果它是一個編輯?MySQL UPDATE vs INSERT和DELETE
基本上,已經發生的情況是,當提交表單時,所有數據都使用INSERT放入表中,如果數據用於更新現有字段,我還有一個名爲edit的標誌,其中包含主鍵ID 。我可以通過兩種方式處理更新函數:
a)創建包含所有字段/數據集的實際更新查詢,並使用if/else來決定是運行更新還是插入查詢。
b)每次插入,但插入成功後,添加一行到DELETE WHERE row = editID。
由於刪除只會發生在INSERT成功的情況下,我不會冒着在沒有插入的情況下刪除數據從而丟失數據的風險,但由於INSERT/DELETE是兩個查詢,效率會不會比只是使用if/else來決定是否運行插入或更新?
有一個使用自動遞增id作爲外鍵的第二個表,但這個表有每個表單提交的時間進行更新,所以如果我刪除表A行,我也將被刪除表b中的關聯行。這似乎是不好的編程習慣,所以我傾向於選擇a),但是使用單線選項是非常誘人的。 DELETE基本上如下。這實際上是不好的編程習慣嗎?除了約定之外,有沒有什麼理由爲什麼這是一個「從來不這樣做!」代碼類型?
if ($insertFormResults) {
$formId = mysql_insert_id();
echo "Your form was saved successfully.";
if(isset($_POST['edit'])){
$query = "DELETE FROM registerForm WHERE id='$_POST[edit]'";
$result = mysql_query($query);
}
}
[MySQL的LAST_INSERT_ID](http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html)會爲您提供自動增量值,然後您可以在UPDATE語句。刪除將無需運行自動增加值,除對參照完整性造成影響外。 – 2011-01-31 19:04:14