我想知道这个查询会做什么:
UPDATE users SET
PaymentAmount = PaymentAmount + TempPaymentAmount,
PaymentDuration = PaymentDuration + TempPaymentDuration,
TempPaymentAmount = NULL,
TempPaymentDuration = NULL
WHERE UserID = 1234
您会注意到我正在尝试将值从临时列复制到原始列并同时使其无效。我想知道查询是否会按照我的预期进行。
答案 0 :(得分:2)
例如,行(UserId = 1234)中的值如下:
PaymentAmount = 10
PaymentDuration = 30
TempPaymentDuration = 40
TempPaymentAmount = 50
执行查询后:
PaymentAmount = PaymentAmount + TempPaymentAmount = 60
PaymentDuration = PaymentDuration + TempPaymentDuration = 70
TempPaymentAmount = NULL
TempPaymentDuration = NULL
如果从表中访问要在表达式中更新的列, UPDATE使用列的当前值。例如, 以下语句将col1设置为比其当前值多一个:
UPDATE t1 SET col1 = col1 + 1;
也是一个互动点:
以下语句中的第二个赋值将col2设置为 当前(更新)col1值,而不是原始col1值。结果 是col1和col2具有相同的值。这种行为不同于 标准SQL。
UPDATE t1 SET col1 = col1 + 1, col2 = col1;
答案 1 :(得分:1)
应该可行,根据文档(http://dev.mysql.com/doc/refman/5.0/en/update.html):
单表UPDATE分配通常从左到右进行评估 对。对于多表更新,无法保证 作业按任何特定顺序进行。
因此,如果你运行它,它应该逐个执行所有SET
个查询,因此首先使用原始值,然后使其无效。
答案 2 :(得分:0)
为什么不试一试并执行它?
答案是肯定的:当您使用在同一查询中修改的列中的值时,数据库引擎将在计算更新值时采用未修改的值。
答案 3 :(得分:0)
它应该做..我对实际发生的事情的理解是:#
UPDATE users SET
:New.PaymentAmount = :Old.PaymentAmount + :Old.TempPaymentAmount,
:New.PaymentDuration = :Old.PaymentDuration + :Old.TempPaymentDuration,
:New.TempPaymentAmount = NULL,
:New.TempPaymentDuration = NULL
WHERE UserID = 1234