sql-update-query
SQL UPDATE 查询
Section titled “SQL UPDATE 查询”SQL UPDATE 语句用于修改表中的现有记录。它是一种强大的数据操作语言(Data Manipulation Language, DML)命令,可以根据你指定的条件更改单行、多行或所有行中的数据。
警告:UPDATE 语句可能会永久性地更改你的数据。务必谨慎,并使用 WHERE 子句来限制更改的范围。如果忘记使用 WHERE 子句,将会更新表中的每一行!
UPDATE 基本语法
Section titled “UPDATE 基本语法”UPDATE 语句的基本结构涉及指定表、要更改的列、它们的新值以及用于标识要更新哪些行的条件。
UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;示例:更新单个记录
Section titled “示例:更新单个记录”考虑一个 Products 表。我们来更新由 ProductID 标识的特定产品的价格。
/* 首先,让我们查看产品的当前状态 */SELECT ProductName, Price FROM Products WHERE ProductID = 101;
-- 假设初始价格为 19.99
UPDATE ProductsSET Price = 24.99WHERE ProductID = 101;此查询只会影响 ProductID 为 101 的行。
高级 UPDATE 场景
Section titled “高级 UPDATE 场景”你可以通过提供匹配多条记录的 WHERE 子句来更新多行。例如,我们对特定类别中的所有产品应用 10% 的折扣。
UPDATE ProductsSET Price = Price * 0.90WHERE Category = 'Electronics';从另一个表更新(带 JOIN 的 UPDATE)
Section titled “从另一个表更新(带 JOIN 的 UPDATE)”一种常见需求是根据另一个表中的值来更新一个表。其语法因 SQL 方言而异。
PostgreSQL 语法:
-- 使用 'new_stock_levels' 表中的信息更新 'products' 表中的库存数量。UPDATE products pSET stock_quantity = s.new_quantityFROM new_stock_levels sWHERE p.product_id = s.product_id;SQL Server / MySQL 语法:
-- 同样的目标,但在 UPDATE 语句中使用 JOIN 语法。UPDATE products pJOIN new_stock_levels s ON p.product_id = s.product_idSET p.stock_quantity = s.new_quantity;最佳实践与安全措施
Section titled “最佳实践与安全措施”- 使用事务:将你的
UPDATE语句封装在事务中。这允许你预览更改,并在不正确时回滚(ROLLBACK),在正确时提交(COMMIT)。 UPDATE前先SELECT:在运行复杂的UPDATE之前,先编写一个带有完全相同WHERE子句的SELECT语句。这将精确地显示哪些行会受到影响。- 明确指定:更新单行时,始终在
WHERE子句中使用主键,以确保你不会意外更新其他行。 - 检查性能:更新大量行可能会锁定表并影响应用程序性能。考虑在非高峰时段执行大型更新。
带事务的安全更新示例
Section titled “带事务的安全更新示例”BEGIN TRANSACTION;
-- 我们打算运行的 UPDATE 语句UPDATE EmployeesSET Salary = Salary * 1.05WHERE DepartmentID = 4;
-- 在提交前检查结果SELECT EmployeeID, Salary FROM Employees WHERE DepartmentID = 4;
-- 如果一切看起来正确,则提交更改。-- COMMIT;
-- 如果出现问题,回滚到原始状态。-- ROLLBACK;