将值从一列复制到另一列并设置为NULL - MySQL

时间:2017-01-30 22:40:02

标签: mysql

在某些情况下,我必须将值从一列复制到另一列,并将第一列设置为NULL。此SQL语句按预期工作:

UPDATE lessons SET order_id_old = order_id, order_id = NULL WHERE id = 1

但我不确定这是否是正确的做法。或者我应该为此目的更好地使用2个查询?

UPDATE lessons SET order_id_old = order_id WHERE id = 1;
UPDATE lessons SET order_id = NULL WHERE id = 1;

2 个答案:

答案 0 :(得分:3)

我肯定会采用第二种方法。以下是documentation所说的内容:

  

单表UPDATE分配通常从左到右进行评估   对。对于多表更新,无法保证   作业按任何特定顺序进行。

在你的情况下,目前很好,因为只有一张桌子。但是,将来如果有人修改了此语句并添加了新的table / join(假设它可以像使用table一样正常工作),它将停止工作/给出不一致结果

因此,出于可读性/可维护性的目的,请继续使用第二种方法。 (另外,我建议将update语句包装到transaction以保留atomicity

答案 1 :(得分:2)

来自documentation

  

如果从表中访问要在表达式中更新的列,UPDATE将使用列的当前值。例如,以下语句将col1设置为比其当前值多一个:

UPDATE t1 SET col1 = col1 + 1;
     

以下语句中的第二个赋值将col2设置为当前(更新的)col1值,而不是原始col1值。结果是col1col2具有相同的值。此行为与标准SQL不同。

UPDATE t1 SET col1 = col1 + 1, col2 = col1;
     

单表UPDATE作业通常从左到右进行评估。对于多表更新,无法保证以任何特定顺序执行分配。

在您的情况下,使用单一陈述应该没问题。