SQLite - 更新查询
SQLite - UPDATE 查询
Section titled “SQLite - UPDATE 查询”SQLite 的 UPDATE 查询用于修改表中的现有记录。您几乎总是在 UPDATE 语句中使用 WHERE 子句来指定要更改的行。省略 WHERE 子句将更新表中的所有行。
UPDATE 查询的基本语法如下。SET 子句指定要更改的列及其新值。
UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;现代 SQLite (3.35.0+) 还支持 RETURNING 子句,这对于一步内获取更新后的数据非常有用。
UPDATE table_nameSET column1 = value1WHERE conditionRETURNING column1, column2, ...;考虑一个 EMPLOYEES 表,其中包含以下数据:
ID NAME TITLE SALARY---------- ---------- ------------------ ----------1 Alice Software Engineer 90000.02 Bob Project Manager 110000.03 Charlie Software Engineer 95000.01. 更新单条记录
Section titled “1. 更新单条记录”让我们更新 ID 为 1 的员工的 TITLE。
UPDATE EMPLOYEESSET TITLE = 'Senior Software Engineer'WHERE ID = 1;2. 基于当前值更新
Section titled “2. 基于当前值更新”让我们给所有软件工程师涨薪 5%。
UPDATE EMPLOYEESSET SALARY = SALARY * 1.05WHERE TITLE LIKE '%Software Engineer%';执行此查询后,Alice 的薪水将变为 94500.0,Charlie 的薪水将变为 99750.0。
3. 使用 RETURNING 子句
Section titled “3. 使用 RETURNING 子句”让我们晋升 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最佳实践和安全性
Section titled “最佳实践和安全性”- 黄金法则:仔细检查您的
WHERE子句。没有WHERE子句的UPDATE将修改表中的每一行。这很少是您想要的结果。 - 预览您的更改:在运行破坏性
UPDATE之前,先使用相同的WHERE子句运行SELECT语句,以查看哪些行将受到影响。SELECT * FROM table_name WHERE condition; - 使用事务:对于关键或多步更新,请将其包装在事务中。这允许您在犯错或后续步骤失败时
ROLLBACK更改。 - 具体化:当您打算只更新一个特定行时,在
WHERE子句中使用主键(WHERE ID = ?)。这比使用其他列更安全,通常也更快。