SQL UPDATE 求值顺序
在 SQL UPDATE 语句中,表达式的求值顺序会对结果产生显着影响。让我们检查以下查询:
UPDATE tbl SET q = q + 1, p = q;
这里出现了问题:“tbl”.“p”会被设置为 q 或 q 1 吗?评估顺序是否受 SQL 标准管辖?
实现各不相同
尽管 SQL 标准缺乏明确性,但不同的数据库实现以不同方式处理评估顺序。测试显示 Firebird、InterBase、MySQL、Oracle、PostgreSQL、SQLite 和 SQL Server 之间存在不同的行为。大多数情况下,“p”的值设置为 q 1,表示从左到右评估。
标准解释
但是, SQL92 规范建议该标准旨在在更新任何行之前评估表达式。这将导致“p”被设置为 q。
MySQL 的独特方法
MySQL 脱颖而出,成为唯一经过测试的数据库,能够在评估。此行为与大多数其他实现不同,可能会导致意外结果。
结论
虽然 SQL 标准缺乏对计算顺序的明确指导,但通常假设在应用更新之前应该评估表达式。然而,实现各不相同,开发人员应该意识到潜在的差异。在评估顺序至关重要的情况下,建议使用中间变量来显式定义所需的操作顺序。
以上是SQL 更新:'p = q”是否反映原始或更新的'q”值?的详细内容。更多信息请关注PHP中文网其他相关文章!