以有限的权限交换 MySQL 列值
在没有更改数据库结构的权限的情况下更新列值可能会带来挑战。使用 UPDATE 语句交换值的直观方法(例如 UPDATE table SET X=Y, Y=X)是不够的。相反,请考虑以下规避结构变化的方法:
方法 1
使用临时变量来保存一个值,同时分配另一个值。这可确保两个值不会被相同的数据覆盖。
UPDATE swap_test SET x=y, y=@temp WHERE (@temp:=x) IS NOT NULL;
方法 2
使用一系列赋值来交换值。此方法可以优雅地处理 NULL 和非 NULL 值。
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
方法 3
利用自联接来更新两个表引用之间的值。此方法需要主键或唯一索引。
UPDATE swap_test s1, swap_test s2 SET s1.x=s1.y, s1.y=s2.x WHERE s1.id=s2.id;
每种方法都有独特的优点和局限性。方法 1 可以处理非 NULL 值,而方法 2 可以处理 NULL 和非 NULL 值。方法 3 需要主键,但如果需要,允许在不同的行之间交换。最终,最佳方法取决于手头任务的具体要求。
以上是如何在没有 ALTER TABLE 权限的情况下交换 MySQL 列值?的详细内容。更多信息请关注PHP中文网其他相关文章!