Mysql在非重复密钥上插入重复密钥
我使用PHP和Mysql 此SQL有效:Mysql在非重复密钥上插入重复密钥,mysql,sql,insert,duplicates,Mysql,Sql,Insert,Duplicates,我使用PHP和Mysql 此SQL有效: INSERT INTO products (id, title, description) VALUES (10, 'value1', 'value2') ON DUPLICATE KEY UPDATE id=10, title='value25', description='value2' abc-one // Unique com
INSERT INTO products (id, title, description)
VALUES (10, 'value1', 'value2')
ON DUPLICATE KEY UPDATE
id=10,
title='value25',
description='value2'
abc-one // Unique combination
abc-two // Unique combination
def-one // Unique combination
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 ...
我的id
是一个主键,因此它起作用。其他字段是varchars
我的真实情况有点不同。看看这个:
INSERT INTO products (id, title, description)
VALUES (10, 'value1', 'value2')
ON DUPLICATE KEY UPDATE
id=10,
title='value25',
description='value2'
abc-one // Unique combination
abc-two // Unique combination
def-one // Unique combination
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 ...
引入了类型,并与sku
一起使用,它是唯一的
id sku title description type
1 abc one
2 abc two
3 def one
所以我的“真正”密钥是我想要使用的sku
,它本身并不是唯一的。我的情况不可能是这样。但与类型一起,它是独一无二的
看看下面,可能会更清楚:
INSERT INTO products (id, title, description)
VALUES (10, 'value1', 'value2')
ON DUPLICATE KEY UPDATE
id=10,
title='value25',
description='value2'
abc-one // Unique combination
abc-two // Unique combination
def-one // Unique combination
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 ...
在这种情况下是否可以使用多重插入/更新SQL查询?如果将列sku
和type
定义为unique
列,则ON DUPLICATE KEY update
表达式也可以工作,例如,在products
表中只有一个PrimaryKey
示例(基于您的数据):
INSERT INTO products (id, title, description)
VALUES (10, 'value1', 'value2')
ON DUPLICATE KEY UPDATE
id=10,
title='value25',
description='value2'
abc-one // Unique combination
abc-two // Unique combination
def-one // Unique combination
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文档:以了解我的理解:如果没有这个示例值,更新查询会是什么样子?“多重查询”的确切含义是什么?@rbr94我当前的更新查询是问题顶部的sql。这是一个insert,但也是一个“关于重复键更新”的更新。那么,为什么不发布真实的问题而不是假设的问题呢?您希望如何对两个唯一列的重复键事件作出反应?@e4c5这是我真正的问题。唯一的区别是我的sku看起来是这样的:dc848d57-f459-4514-93bb-5649b22c648c`但它更难阅读,所以我在这个问题中简化了它们。我不想让它变得比需要的复杂,所以我已经合并了它们,并将其设置为一个新的id,而没有自动递增。我不认为我以后会使用这个id,所以它应该对性能有好处。谢谢