2
在相同的UPDATE查询中是否存在指定的更新同一列2+次的行为,如下所示?在查询中多次更新同一列
UPDATE tbl SET a = 5, b = 'something', a = 6 WHERE c = 'whatever';
是否有这样的行为规范,也可能是SQL的口味有所不同(例如,它是“未定义的行为”)?用sqlite粗略测试似乎表明它们是从左到右执行的,所以最后一列的值将是结果值,但这并不意味着总是这样。
编辑:我试图做到这一点的原因是我正在测试一些类项目的SQL注入。 UPDATE中的一个字段被不安全地注入,我试图用它来覆盖来自同一查询的以前的SET字段。
你为什么要这样做?也许样本数据和期望的结果会帮助我们理解你的目标。在'mysql'中,它会用你提供的最后一个值更新 - 'sql server'甚至不允许它。你想达到什么目的? – sgeddes
@sgeddes我更新了帖子。 – iobender
'set'语句的赋值顺序通常没有指定。给定的数据库可能会指定词法排序,但不能保证。 –