mysql中Update查询中的多个set和where子句

时间:2011-04-24 21:43:24

标签: mysql

我不认为这是可能的,因为我找不到任何东西,但我想我会在这里检查,以防我没有找到正确的东西。

我的数据库中有一个设置表,它有两列。第一列是设置名称,第二列是值。

我需要同时更新所有这些内容。我想看看是否有办法在一个查询的同时更新这些值,如下所示

UPDATE table SET col1='setting name' WHERE col2='1 value' AND SET col1='another name' WHERE col2='another value';

我知道上面的内容不是正确的SQL格式,但我想这样做是想知道是否有其他方法可以完成此操作而不必为每个执行单独的SQL查询设置我想要更新。

感谢您的帮助。

6 个答案:

答案 0 :(得分:4)

您可以使用INSERT INTO .. ON DUPLICATE KEY UPDATE更新具有不同值的多个行。

您需要一个唯一索引(如主键)来制作“重复键” - 部分工作

示例:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
  ON DUPLICATE KEY UPDATE b = VALUES(b), c = VALUES(c);

-- VALUES(x) points back to the value you gave for field x
-- so for b it is 2 and 5, for c it is 3 and 6 for rows 1 and 4 respectively (if you assume that a is your unique key field)

如果您有特定案例,我可以为您提供确切的查询。

答案 1 :(得分:2)

  UPDATE table
    SET col2 = 
        CASE col1 
           WHEN 'setting1' 
           THEN 'value' 
           ELSE col2 
        END
   , SET col1 = ...
    ...

答案 2 :(得分:1)

我决定一次性使用多个查询。所以代码就像

UPDATE table SET col2='value1' WHERE col1='setting1';
UPDATE table SET col2='value2' WHERE col1='setting1';

等 等

我刚刚完成了一项测试,我将1500条记录插入数据库。在没有启动数据库事务的情况下执行此操作并耗时35秒,清空数据库并再次执行但先启动事务,然后插入第1500条记录完成事务并花费时间为1秒,因此看起来似乎是这样做的在数据库事务中是可行的方法。

答案 3 :(得分:0)

如果要以原子形式运行,则需要运行单独的SQL查询并使用事务。

答案 4 :(得分:0)

UPDATE table SET col1=if(col2='1 value','setting name','another name') WHERE col2='1 value' OR col2='another value'

答案 5 :(得分:0)

@Frits Van Campen,

插入..重复工作对我来说。 多年来,当我想从excel导入更新超过一千条记录时,我这样做了。

只有这个技巧的问题是,当没有要更新的记录时,此方法不是忽略而是插入记录,而在某些情况下则是一个问题。然后我需要插入另一个字段,然后导入后我必须删除所有已插入的记录而不是更新。