提示:注意并关闭 AUTOCOMMIT

UPDATE 命令

UPDATE 命令用于修改表中现有的一行或多行记录,其基本语法如下:

UPDATE <tablename>
SET    <columnname> = <value>,
       <columnname> = <value>,
       ...
WHERE  <search_condition>;
  • SET:用于指定需要更新的列和相应的新值。
  • WHERE:限制更新操作的作用范围,仅对满足条件的行生效。如果省略 WHERE,则更新表中的所有行。
  • 未被提及的列将保持不变。
  • 如果 WHERE 条件没有匹配到任何行,则不会更新任何数据,也不会产生错误或异常。

灵活性

UPDATE 命令非常灵活,可以:

  1. 更新一个或多个列;
  2. 根据 WHERE 条件更新零行、一行或多行;
  3. 支持动态值(如系统日期、时间戳或时区),具体取决于实现。

示例

以下示例演示了基本用法:

-- 修改 id 为 5 的记录
UPDATE person
SET    firstname = 'Jimmy Walker', 
       lastname  = 'de la Crux' 
WHERE  id = 5;

-- 撤销更改
ROLLBACK;

附加信息

UPDATE 命令不仅可以用来更新固定值,还支持其他动态特性和条件。以下是一些更复杂的操作:

  1. 基于计算更新列值: 通过计算或函数动态更新列值。

    UPDATE person
    SET    weight = weight + 5
    WHERE  weight < 60;
    
  2. 更新多个行并设置动态值: 使用 CURRENT_DATE 或其他系统变量更新时间相关列。

    UPDATE person
    SET    date_of_birth = CURRENT_DATE
    WHERE  id BETWEEN 1 AND 10;
    
  3. 条件更新: 结合 CASE 表达式,根据不同条件更新列值。

    UPDATE person
    SET    weight = CASE 
                    WHEN weight < 40 THEN weight + 10
                    ELSE weight + 5
                    END
    WHERE  id <= 10;
    
  4. 使用子查询更新: 动态从另一张表中获取值来更新。

    UPDATE person
    SET    weight = (SELECT AVG(weight) FROM person WHERE place_of_birth = 'Dallas')
    WHERE  place_of_birth = 'Richland';
    

清理和撤销更改

在测试或需要撤销更改时,可以使用以下命令:

-- 撤销未提交的更改
ROLLBACK;

-- 删除所有更改过的行
DELETE FROM person WHERE id > 100;
COMMIT;
最后修改: 2025年01月28日 星期二 13:27