我再次问这个问题,因为我无法直接回答其他问题。
我的情况如下,两个表格phones
和features
。
结构:
手机
功能
现在,features
包含大量值,仅在1和1之间。 4将通过phone_id
对应某个电话。
现在,当我更新功能时,您认为删除然后再次插入新功能或更新现有功能最好?
//编辑:
特价
合同
品牌
所以基本上,一个特殊的电话和合同连在一起,并从两个表格中获取信息以输出。然后在此过程中,每个手机的功能都会使用一个功能单独加载。
//编辑2:
哦,一次只会删除/更新一个手机的功能,而且一次只删除1-4个功能。此外,功能可以总是或多或少,而不是一组数字。
答案 0 :(得分:2)
当您更新功能"你这样做,update
。
答案 1 :(得分:1)
应该使用UPDATE。或者,可以在一个REPLACE命令中完成删除和插入。
http://dev.mysql.com/doc/refman/5.0/en/replace.html
此外,如果可以共享功能(多对多关系),您可能需要考虑仅将电话ID与功能ID相关联的第三个表。
答案 2 :(得分:0)
如果每部手机的功能数量发生变化,则必须删除并插入。要更新,您需要:
如果您只是删除整个列表并重新插入它们,那么您可以省去一些维护问题。
如果您的数据的一致性是一个问题或疑虑(数据被删除但在插入导致脚本无法完成之前发生错误),那么将您的查询包装在一个事务中。
举个例子:
我有一个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更好。