2016-09-22 97 views
1

我使用PHP和Mysql。Mysql插入重复键非重复键

这个SQL工作:

INSERT INTO products (id, title, description) 
      VALUES (10, 'value1', 'value2') 
      ON DUPLICATE KEY UPDATE 
      id=10, 
      title='value25', 
      description='value2' 

id是一个主键,为此它的工作原理。其他字段是varchars。

我的真实情况有点不同。看看这个:

类型介绍和在一起sku它是唯一的。

id sku title description type 
1  abc       one 
2  abc       two 
3  def       one 

所以我的“真实”的关键是,我想使用sku和它的通过自己独特的。这不可能是我的情况。但是与type一起它是独一无二的。

下面看,它可能会更清楚:

abc-one // Unique combination 
abc-two // Unique combination 
def-one // Unique combination 

是否有可能在这种情况下,使用多插入/更新SQL查询?

+0

对于我的理解:请问你的更新查询貌似没有这个示例值? “多查询”究竟意味着什么? – rbr94

+0

@ rbr94我当前的更新查询是问题之上的sql。这是一个插入,但也是一个更新'重复密钥更新'。 –

+0

那么你为什么不发布真正的问题,而不是一个假设的? – e4c5

回答

1

如果定义列skutypeunique列,则ON DUPLICATE KEY UPDATE表达也将工作,以及如在products表中只有一个PrimaryKey

示例(基于数据):

id sku title description type 
1  abc       one 
2  abc       two 
3  def       one 

//INSERT 
INSERT INTO products (id, sku, type) VALUES (4, 'ghi', 'one') ON DUPLICATE KEY UPDATE ... 

//UPDATE dataset with ID=1 
INSERT INTO products (id, sku, type) VALUES (1, 'ghi', 'two') ON DUPLICATE KEY UPDATE ... 

//UPDATE dataset with sku='abc' and type='one' 
INSERT INTO products (id, sku, type) VALUES (5, 'abc', 'one') ON DUPLICATE KEY UPDATE ... 

因此看到MySQL文档:https://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html

+0

我不想让它复杂得多,所以我已经合并了它们并将它设置为一个新的ID而没有自动增加。我认为我以后不会使用这个ID,所以它应该对性能有好处。谢谢! –