[英]UPDATE or DELETE first then INSERT
我再次問這個問題,因為我無法直接回答其他問題。
我的情況如下,兩個表, phones
和features
。
結構體:
手機
特征
現在, features
包含很多值,只有1到4之間的值將通過phone_id
對應於某個手機。
現在,當我更新功能時,您是否認為刪除然后再次插入新功能或更新現有功能將是最佳選擇?
//編輯:
特價
合同
牌
所以基本上,一個特殊的聯系電話和合同,並從兩個表格中獲取信息以輸出。 然后在此過程中,每個手機的功能都會使用一個功能單獨加載。
//編輯2:
哦, 一次只能刪除/更新一部手機的功能,而且一次只能刪除1-4個功能。 此外,功能可以總是或多或少,而不是一組數字。
當您“更新功能”時,您只需update
。
應該使用UPDATE。 或者,可以在一個REPLACE命令中完成刪除和插入。
http://dev.mysql.com/doc/refman/5.0/en/replace.html
此外,如果可以共享功能(多對多關系),您可能需要考慮僅將電話ID與功能ID相關聯的第三個表。
如果每部手機的功能數量發生變化,則必須刪除並插入。 要更新,您需要:
就像你只是刪除整個列表並重新插入它們一樣,你可以省去一些維護問題。
如果數據的一致性是一個問題或問題(數據被刪除但在插入導致腳本無法完成之前發生錯誤),則將查詢包裝在事務中。
舉個例子:
我有一個博客Posts(id, title, body)
和Categories(id, post_id, category)
。 我的第一篇文章“Hello World”被歸類為“meta,php和javascript”。 然后一年后,我修改帖子以獲得有關mysql的一些信息(或者我添加一個mysql類別)並取出javascript。
這是我需要做的(主要是偽代碼):
//old set
SELECT * FROM Categories WHERE post_id=1
foreach($categories as $category) {
if(in_array($category['id'], $_POST['categories']) {
//this category is in the new set and the old set, do nothing
}
elseif(!in_array($category['id'], $_POST['categories']) {
//this category is in the old set, but not the new one, delete it
$queries[] = "DELETE FROM Categories WHERE id=".$category['id'];
}
else {
//new category, add it
$queries[] = "INSERT INTO Categories()..."
}
}
foreach($queries as $item) {
//run query
}
對此:
DELETE FROM Categories WHERE post_id=$_POST['id']
foreach($_POST['categories'] as $item) {
INSERT INTO Categories() ...
}
就個人而言,我認為選項#2更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.