Mysql 重复键更新时插入忽略索引

Mysql 重复键更新时插入忽略索引,mysql,on-duplicate-key,Mysql,On Duplicate Key,所以我有一个表product_supplier,我需要从import_tbl向其添加数据。Product_supplier有三列:Product_id、supplier_id和price。Import\u tbl具有相同的列和一些额外的列。最重要的是,当产品id和供应商id的特定组合存在时,只需更新价格,这是我无法实现的。如果该组合不存在,则需要添加新行。我试过这个问题 INSERT INTO product_supplier (product_id, supplier_id, price) S

所以我有一个表product_supplier,我需要从import_tbl向其添加数据。Product_supplier有三列:Product_id、supplier_id和price。Import\u tbl具有相同的列和一些额外的列。最重要的是,当产品id和供应商id的特定组合存在时,只需更新价格,这是我无法实现的。如果该组合不存在,则需要添加新行。我试过这个问题

INSERT INTO product_supplier (product_id, supplier_id, price)
SELECT i.product_id, i.supplier_id, i.price
FROM import_tbl i
ON DUPLICATE KEY UPDATE
    price = i.price
如果我添加了一个带有新产品标识的行,则该方法有效,但它完全忽略了供应商标识。因此,如果我添加了一个使用相同产品标识但不同供应商标识的行,则该方法不会添加新行

我认为这与索引有关,我尝试对product_id和supplier_id使用唯一索引,并对product_id和supplier_id使用多列索引。但当我将EXPLAIN放在查询前面时,它从不识别任何索引。请帮忙,谢谢

表1产品供应商的结构

+---------------------+---------+------+-----+---------+----------------+
|        Field        |  Type   | Null | Key | Default |     Extra      |
+---------------------+---------+------+-----+---------+----------------+
| product_supplier_id | int(11) | NO   | PRI | NULL    | auto_increment |
| product_id          | int(11) | NO   | UNI | 0       |                |
| supplier_id         | int(11) | NO   | MUL | 0       |                |
| price               | int(11) | NO   |     | 0       |                |
+---------------------+---------+------+-----+---------+----------------+

看起来你有一个关键问题

“在重复键更新时”只关注表的主键,在这种情况下,
product\u supplier\u id
加上
product\u id
的组合主键。插入中未包含
产品\u供应商\u id
字段,然后自动生成该字段

如果您确实希望将此提交作为单个操作(而不是检查是否存在,然后选择插入或更新),则需要将主键移动到基于product_id和supplier_id组合的位置,并删除auto increment字段


如果您需要能够为每个产品/供应商提供多个价格,则无法在重复密钥更新中使用,并且需要运行多个查询。

是否可以包括产品供应商的表结构?我添加了产品供应商的表结构您的select语句没有意义。如果没有明确的订单,价格的价值将不具有确定性,并且不再保留与其他属性的任何关联。但这是没有意义的,因为您没有从select命令填充主键或唯一键。我们无法修复这个问题,因为我们不知道数据的含义/来源,而且您也没有给出任何输入和输出示例。