Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql在非重复密钥上插入重复密钥_Mysql_Sql_Insert_Duplicates - Fatal编程技术网

Mysql在非重复密钥上插入重复密钥

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

我使用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 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,所以它应该对性能有好处。谢谢