代码之家  ›  专栏  ›  技术社区  ›  JD Isaacks

尝试插入重复键时,整个查询是否会失败?

  •  1
  • JD Isaacks  · 技术社区  · 15 年前

    如果我有这样的问题:

    INSERT INTO map
        SELECT 5, product_id FROM products WHERE price < 500 )
    

    假设这试图在映射表中插入300行。假设20个插入会产生重复的键错误。其他280行将被插入还是整个查询将失败?

    如果是,那么最好的方法是什么来编写这个查询,以便插入不重复的行并忽略重复的行?

    1 回复  |  直到 15 年前
        1
  •  3
  •   dev-null-dweller    15 年前

    查询将在第一个重复键时失败。如果要继续插入,请使用

    INSERT IGNORE INTO map (map_id, product_id)
    SELECT  5, product_id FROM products WHERE price < 500
    

    当插入这样的多行时,不要将查询放入 VALUES() .