当某些行可能是已存在的行的重复时,如何插入多行?

时间:2011-09-23 23:47:32

标签: mysql database

所以我有一个复选框表单,用户可以在其中选择多个值。然后可以返回并选择不同的值。每个值都存储为一行(UserID,value)。

当某些行可能与表中已存在的行重复时,如何执行INSERT?

我应该首先删除现有值,然后插入新值吗?

ON DUPLICATE KEY UPDATE似乎很棘手,因为我会一次插入多行,那么我如何定义和分离需要UPDATING的那些与需要INSERTING的那些?

例如,假设用户首次进行选择:

INSERT INTO 
   Choices(UserID,value) 
VALUES 
   ('1','banana'),('1','apple'),('1','orange'),('1','cranberry'),('1','lemon')

如果用户稍后返回并做出不同的选择,包括原始查询中的某些值会导致重复,会怎样?

我该如何处理最好的?

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

答案 2 :(得分:0)

我对mysql知之甚少,但在MS SQL 2000+中,我们可以使用XML执行存储过程作为其中一个参数。该XML将包含一个标识 - 值对列表。我们将使用openxml将此XML作为表打开,并确定需要使用左外连接或右外连接删除或插入哪些行。从SQL 2008开始(我认为)我们有一个新的合并语句,让我们在一个表上的一个语句中执行删除,更新和插入行操作。这样我们就可以利用SQL中的Set数组运算,而不是在应用程序代码中循环遍历数组。

您还可以在会话中保留从数据库中检索到的选择列表,并将“旧列表”与应用程序代码中的“新选择列表”进行比较。您需要确定需要删除或添加哪些行。您可能不需要担心更新,因为您可能只在此表中保留外键,并且描述在某种参考表中。

SQL 2008中还有另一种方法涉及将用户定义的数据类型用作自定义表,但我对此并不了解。

就个人而言,我更喜欢XML路由,因为您只需将结束状态发送到sp中,并且您的sp会自动确定需要删除或插入的行。

希望这会有所帮助。