Skip to content

SQLite - 更新查询

SQLite 的 UPDATE 查询用于修改表中的现有记录。您几乎总是在 UPDATE 语句中使用 WHERE 子句来指定要更改的行。省略 WHERE 子句将更新表中的所有行。

UPDATE 查询的基本语法如下。SET 子句指定要更改的列及其新值。

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

现代 SQLite (3.35.0+) 还支持 RETURNING 子句,这对于一步内获取更新后的数据非常有用。

UPDATE table_name
SET column1 = value1
WHERE condition
RETURNING column1, column2, ...;

考虑一个 EMPLOYEES 表,其中包含以下数据:

ID NAME TITLE SALARY
---------- ---------- ------------------ ----------
1 Alice Software Engineer 90000.0
2 Bob Project Manager 110000.0
3 Charlie Software Engineer 95000.0

让我们更新 ID 为 1 的员工的 TITLE。

UPDATE EMPLOYEES
SET TITLE = 'Senior Software Engineer'
WHERE ID = 1;

让我们给所有软件工程师涨薪 5%。

UPDATE EMPLOYEES
SET SALARY = SALARY * 1.05
WHERE TITLE LIKE '%Software Engineer%';

执行此查询后,Alice 的薪水将变为 94500.0,Charlie 的薪水将变为 99750.0。

让我们晋升 Bob,并立即查看他的新薪水,而无需单独的 SELECT 查询。

sqlite> UPDATE EMPLOYEES
...> SET TITLE = 'Director of Engineering', SALARY = 140000.0
...> WHERE ID = 2
...> RETURNING NAME, TITLE, SALARY;
NAME TITLE SALARY
---------- ----------------------- ----------
Bob Director of Engineering 140000.0
  • 黄金法则:仔细检查您的 WHERE 子句。没有 WHERE 子句的 UPDATE 将修改表中的每一行。这很少是您想要的结果。
  • 预览您的更改:在运行破坏性 UPDATE 之前,先使用相同的 WHERE 子句运行 SELECT 语句,以查看哪些行将受到影响。SELECT * FROM table_name WHERE condition;
  • 使用事务:对于关键或多步更新,请将其包装在事务中。这允许您在犯错或后续步骤失败时 ROLLBACK 更改。
  • 具体化:当您打算只更新一个特定行时,在 WHERE 子句中使用主键(WHERE ID = ?)。这比使用其他列更安全,通常也更快。