编辑
2025-09-26
SQLSERVER
00

目录

示例数据表 - Employees
INSERT操作
添加新记录
Insert 备份数据
UPDATE操作
更新记录
跨表更新
DELETE操作
删除记录
Truncate 操作
总结

在数据库管理系统中,数据的维护是常见的任务之一。这通常涉及到添加新记录、更新现有记录和删除不再需要的记录。在SQL中,这些操作分别通过 INSERTUPDATEDELETE 语句来完成。本文将详细介绍这三种操作的语法和使用方法,并通过一个示例数据表来演示它们的实际应用。

示例数据表 - Employees

假设我们有一个名为 Employees 的表,它包含了员工的ID、姓名、职位和薪资信息。表的结构和初始内容如下:

EmployeeIDNamePositionSalary
1JohnDeveloper55000
2JaneDesigner62000
3RobertManager48000

表结构

SQL
CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, Name NVARCHAR(100), Position NVARCHAR(100), Salary DECIMAL(10, 2) );

测试数据

SQL
INSERT INTO Employees (EmployeeID, Name, Position, Salary) VALUES (1, 'John', 'Developer', 55000), (2, 'Jane', 'Designer', 62000), (3, 'Robert', 'Manager', 48000);

INSERT操作

INSERT 语句用于向表中添加新的记录。其基本语法如下:

SQL
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

添加新记录

假设我们要向 Employees 表中添加一个新员工,名叫 Alice,职位是 Analyst,薪资是 50000。

SQL
INSERT INTO Employees (EmployeeID, Name, Position, Salary) VALUES (4, 'Alice', 'Analyst', 50000);

执行后,Employees 表的内容将变为:

EmployeeIDNamePositionSalary
1JohnDeveloper55000
2JaneDesigner62000
3RobertManager48000
4AliceAnalyst50000

image.png

Insert 备份数据

需要先创建EmployeeBackup 表

SQL
INSERT INTO EmployeeBackup (EmployeeID, Name, Position, Salary) SELECT EmployeeID, Name, Position, Salary FROM Employees;

UPDATE操作

UPDATE 语句用于修改表中的现有记录。其基本语法如下:

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

更新记录

假设我们需要给所有薪资低于 55000 的员工加薪 5000。我们可以使用 UPDATE 语句来实现这一目标。

SQL
UPDATE Employees SET Salary = Salary + 5000 WHERE Salary < 55000;

执行后,Employees 表的内容将更新为:

EmployeeIDNamePositionSalary
1JohnDeveloper55000
2JaneDesigner62000
3RobertManager53000
4AliceAnalyst55000

image.png

跨表更新

测试数据

SQL
-- 创建Employees表 CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, Name NVARCHAR(100), DepartmentID INT, Salary DECIMAL(10, 2) ); -- 创建Departments表 CREATE TABLE Departments ( DepartmentID INT PRIMARY KEY, DepartmentName NVARCHAR(100), SalaryIncreasePercentage DECIMAL(5, 2) ); -- 向Employees表插入测试数据 INSERT INTO Employees (EmployeeID, Name, DepartmentID, Salary) VALUES (1, 'John Doe', 101, 50000.00), (2, 'Jane Smith', 102, 60000.00), (3, 'Alice Jones', 101, 55000.00), (4, 'Bruce Wayne', 103, 70000.00); -- 向Departments表插入测试数据 INSERT INTO Departments (DepartmentID, DepartmentName, SalaryIncreasePercentage) VALUES (101, 'IT', 5), (102, 'HR', 3), (103, 'Finance', 4);

现在,我们有了两个表,分别包含员工和部门的信息,以及我们想要应用的薪水增长百分比。接下来,我们将执行跨表更新,以增加 IT 部门员工的薪水。

SQL
-- 更新IT部门员工的薪水 UPDATE Employees SET Salary = Salary + (Salary * d.SalaryIncreasePercentage / 100) FROM Employees e INNER JOIN Departments d ON e.DepartmentID = d.DepartmentID WHERE d.DepartmentName = 'IT'; -- 查询更新后的Employees表,以查看更改 SELECT * FROM Employees;

在这个跨表更新操作中,我们首先指定了要更新的表 Employees,然后设置了新的 Salary 值,这个值是通过将原始薪水与 Departments 表中相应 SalaryIncreasePercentage 相乘并除以 100 来计算的。我们使用 INNER JOIN 来连接 Employees 表(使用别名 e)和 Departments 表(使用别名 d),基于共同的 DepartmentID 字段。WHERE 子句确保只有 DepartmentNameIT 的部门员工的薪水得到更新。

最后,我们执行了一个 SELECT 查询来检查 Employees 表中的数据,以确保更新按预期进行。

DELETE操作

DELETE 语句用于从表中删除记录。其基本语法如下:

SQL
DELETE FROM table_name WHERE condition;

删除记录

假设 Robert 离职了,我们需要从 Employees 表中删除他的记录。

SQL
DELETE FROM Employees WHERE Name = 'Robert';

执行后,Employees 表的内容将变为:

EmployeeIDNamePositionSalary
1JohnDeveloper55000
2JaneDesigner62000
4AliceAnalyst55000

image.png

Truncate 操作

SQL
-- 创建一个示例表 CREATE TABLE SampleData ( ID INT PRIMARY KEY, Data NVARCHAR(100) ); -- 插入测试数据 INSERT INTO SampleData (ID, Data) VALUES (1, 'Data 1'), (2, 'Data 2'), (3, 'Data 3'); -- 使用TRUNCATE TABLE清空表 TRUNCATE TABLE SampleData; -- 查询表中的数据以确认它已被清空 SELECT * FROM SampleData;

执行 TRUNCATE TABLE SampleData; 后,SampleData 表中的所有行将被删除,表将被重置到一个空表的状态。

TRUNCATE TABLEDELETE 语句都用于从表中删除数据,但它们之间有几个关键区别:

  1. 性能:TRUNCATE TABLE 通常比 DELETE 更快,因为它不扫描每一行来删除,而是直接删除数据页并重置表的存储。这意味着 TRUNCATE TABLE 不会生成大量的日志记录,这在大型表中尤其重要。
  2. 日志记录:TRUNCATE TABLE 是一个最小日志操作,它只记录页的去除而不是每行的删除。相比之下,DELETE 语句会为每个删除的行记录日志,这可能导致在大型表上的操作变得缓慢。
  3. 重置标识列:如果表有一个自动递增的标识列,TRUNCATE TABLE 会重置该标识列的计数器,而 DELETE 不会。这意味着在 TRUNCATE TABLE 后插入的第一行将具有初始标识值(通常是 1),而 DELETE 之后插入的行将接着上一个标识值。
  4. 事务和回滚:尽管 TRUNCATE TABLE 可以在事务中回滚,但由于它是一个最小日志操作,它可能不适合需要精确点对点恢复的场景。
  5. 触发器:DELETE 语句可以激活表上的 DELETE 触发器,而 TRUNCATE TABLE 不会。
  6. 使用限制:TRUNCATE TABLE 不能用于有外键约束引用的表,也不能用于有启用删除触发器的表。DELETE 没有这些限制。
  7. 权限:执行 TRUNCATE TABLE 通常需要表的更高权限(比如 ALTER),而 DELETE 只需要 DELETE 权限。

总结

在本文中,我们详细介绍了如何在SQL中使用 INSERTUPDATEDELETE 语句来对数据库进行增、改、删操作。通过上述示例,我们学习了如何添加新记录、更新现有记录以及删除不再需要的记录。掌握这些基本操作对于进行有效的数据库管理至关重要。在实际应用中,务必确保在执行 UPDATEDELETE 操作前正确设置 WHERE 子句,以避免意外修改或删除数据。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!