在数据库管理系统中,数据的维护是常见的任务之一。这通常涉及到添加新记录、更新现有记录和删除不再需要的记录。在SQL中,这些操作分别通过 INSERT
、UPDATE
和 DELETE
语句来完成。本文将详细介绍这三种操作的语法和使用方法,并通过一个示例数据表来演示它们的实际应用。
假设我们有一个名为 Employees
的表,它包含了员工的ID、姓名、职位和薪资信息。表的结构和初始内容如下:
EmployeeID | Name | Position | Salary |
---|---|---|---|
1 | John | Developer | 55000 |
2 | Jane | Designer | 62000 |
3 | Robert | Manager | 48000 |
表结构
SQLCREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name NVARCHAR(100),
Position NVARCHAR(100),
Salary DECIMAL(10, 2)
);
测试数据
SQLINSERT INTO Employees (EmployeeID, Name, Position, Salary) VALUES
(1, 'John', 'Developer', 55000),
(2, 'Jane', 'Designer', 62000),
(3, 'Robert', 'Manager', 48000);
INSERT
语句用于向表中添加新的记录。其基本语法如下:
SQLINSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
假设我们要向 Employees
表中添加一个新员工,名叫 Alice,职位是 Analyst,薪资是 50000。
SQLINSERT INTO Employees (EmployeeID, Name, Position, Salary)
VALUES (4, 'Alice', 'Analyst', 50000);
执行后,Employees
表的内容将变为:
EmployeeID | Name | Position | Salary |
---|---|---|---|
1 | John | Developer | 55000 |
2 | Jane | Designer | 62000 |
3 | Robert | Manager | 48000 |
4 | Alice | Analyst | 50000 |
需要先创建EmployeeBackup 表
SQLINSERT INTO EmployeeBackup (EmployeeID, Name, Position, Salary)
SELECT EmployeeID, Name, Position, Salary
FROM Employees;
UPDATE
语句用于修改表中的现有记录。其基本语法如下:
SQLUPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
假设我们需要给所有薪资低于 55000 的员工加薪 5000。我们可以使用 UPDATE
语句来实现这一目标。
SQLUPDATE Employees
SET Salary = Salary + 5000
WHERE Salary < 55000;
执行后,Employees
表的内容将更新为:
EmployeeID | Name | Position | Salary |
---|---|---|---|
1 | John | Developer | 55000 |
2 | Jane | Designer | 62000 |
3 | Robert | Manager | 53000 |
4 | Alice | Analyst | 55000 |
测试数据
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
子句确保只有 DepartmentName
为 IT
的部门员工的薪水得到更新。
最后,我们执行了一个 SELECT
查询来检查 Employees
表中的数据,以确保更新按预期进行。
DELETE
语句用于从表中删除记录。其基本语法如下:
SQLDELETE FROM table_name
WHERE condition;
假设 Robert 离职了,我们需要从 Employees
表中删除他的记录。
SQLDELETE FROM Employees
WHERE Name = 'Robert';
执行后,Employees
表的内容将变为:
EmployeeID | Name | Position | Salary |
---|---|---|---|
1 | John | Developer | 55000 |
2 | Jane | Designer | 62000 |
4 | Alice | Analyst | 55000 |
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 TABLE
和 DELETE
语句都用于从表中删除数据,但它们之间有几个关键区别:
TRUNCATE TABLE
通常比 DELETE
更快,因为它不扫描每一行来删除,而是直接删除数据页并重置表的存储。这意味着 TRUNCATE TABLE
不会生成大量的日志记录,这在大型表中尤其重要。TRUNCATE TABLE
是一个最小日志操作,它只记录页的去除而不是每行的删除。相比之下,DELETE
语句会为每个删除的行记录日志,这可能导致在大型表上的操作变得缓慢。TRUNCATE TABLE
会重置该标识列的计数器,而 DELETE
不会。这意味着在 TRUNCATE TABLE
后插入的第一行将具有初始标识值(通常是 1),而 DELETE
之后插入的行将接着上一个标识值。TRUNCATE TABLE
可以在事务中回滚,但由于它是一个最小日志操作,它可能不适合需要精确点对点恢复的场景。DELETE
语句可以激活表上的 DELETE 触发器,而 TRUNCATE TABLE
不会。TRUNCATE TABLE
不能用于有外键约束引用的表,也不能用于有启用删除触发器的表。DELETE
没有这些限制。TRUNCATE TABLE
通常需要表的更高权限(比如 ALTER),而 DELETE
只需要 DELETE 权限。在本文中,我们详细介绍了如何在SQL中使用 INSERT
、UPDATE
和 DELETE
语句来对数据库进行增、改、删操作。通过上述示例,我们学习了如何添加新记录、更新现有记录以及删除不再需要的记录。掌握这些基本操作对于进行有效的数据库管理至关重要。在实际应用中,务必确保在执行 UPDATE
和 DELETE
操作前正确设置 WHERE
子句,以避免意外修改或删除数据。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!