簡體   English   中英

首先更新或刪除然后INSERT

[英]UPDATE or DELETE first then INSERT

我再次問這個問題,因為我無法直接回答其他問題。

我的情況如下,兩個表, phonesfeatures

結構體:

手機

  • ID
  • brand_id
  • 模型
  • 圖片
  • 發表

特征

  • ID
  • phone_id
  • 特征

現在, features包含很多值,只有1到4之間的值將通過phone_id對應於某個手機。

現在,當我更新功能時,您是否認為刪除然后再次插入新功能或更新現有功能將是最佳選擇?

//編輯:

特價

  • ID*
  • phone_id
  • contract_id
  • start_publish
  • finish_publish
  • 發表

合同

  • ID*
  • 名稱
  • 效益
  • 持續時間
  • 價格等

  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM