繁体   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