本学习笔记系统梳理SQL Server核心知识点,涵盖数据库基础架构、T-SQL语法精要(查询、存储过程、触发器)、索引设计与优化策略、事务ACID特性及并发控制机制,实战要点聚焦实际操作:通过案例掌握表设计、数据导入导出,深入理解执行计划调优,熟练运用备份恢复保障数据安全,并结合常见错误分析提升问题解决能力,助力理论与实践结合,夯实数据库管理与开发技能。
《SQL Server实用教程(第五版)》作为数据库领域的经典教材,系统讲解了SQL Server的安装、配置、管理及开发技能,本文基于该教材内容,提炼核心知识点与实战要点,帮助读者快速掌握SQL Server的核心操作与高级应用,适合初学者入门与开发者复习参考。

SQL Server基础概念
1 SQL Server简介
SQL Server是由微软开发的关系型数据库管理系统(RDBMS),支持事务处理、数据分析、商业智能等功能,第五版教材以SQL Server 2019/2022为主要版本,涵盖云数据库(Azure SQL)的融合应用。
2 核心组件
- SQL Server Management Studio(SSMS):图形化管理工具,用于数据库设计、查询执行、监控等。
- 数据库引擎:核心服务,负责数据存储、查询处理、事务管理。
- 分析服务(SSAS):支持OLAP(在线分析处理)与数据挖掘。
- 报表服务(SSRS):用于创建与管理数据报表。
- 集成服务(SSIS):数据提取、转换、加载(ETL)工具。
数据库与表的创建与管理
1 数据库操作
- 创建数据库:
CREATE DATABASE MyDB ON PRIMARY ( NAME = MyDB_data, FILENAME = 'D:\Data\MyDB.mdf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 10% ) LOG ON ( NAME = MyDB_log, FILENAME = 'D:\Log\MyDB.ldf', SIZE = 2MB, MAXSIZE = 50MB, FILEGROWTH = 1MB ); - 修改数据库:扩展数据文件(
ALTER DATABASE MyDB ADD FILE...)、设置恢复模式(ALTER DATABASE MyDB SET RECOVERY SIMPLE)。 - 删除数据库:
DROP DATABASE MyDB(注意:不可恢复,需谨慎操作)。
2 表的创建与管理
- 创建表:
CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY IDENTITY(1,1), -- 自增主键 Name NVARCHAR(50) NOT NULL, Gender CHAR(1) CHECK (Gender IN ('M', 'F')), -- 检查约束 HireDate DATE DEFAULT GETDATE(), -- 默认值 Salary DECIMAL(10,2) CHECK (Salary > 0) ); - 修改表:添加列(
ALTER TABLE Employees ADD Email NVARCHAR(100))、修改列(ALTER TABLE Employees ALTER COLUMN Salary DECIMAL(10,2))、删除列(ALTER TABLE Employees DROP COLUMN Email)。 - 约束类型:主键(
PRIMARY KEY)、外键(FOREIGN KEY)、唯一(UNIQUE)、非空(NOT NULL)、检查(CHECK)、默认(DEFAULT)。
T-SQL语言基础
1 变量与运算符
- 变量声明与赋值:
DECLARE @EmployeeCount INT; SET @EmployeeCount = (SELECT COUNT(*) FROM Employees); SELECT @EmployeeCount AS '员工总数';
- 运算符:算术运算符(、、、)、比较运算符(、
>、<、LIKE)、逻辑运算符(AND、OR、NOT)。
2 流程控制语句
- 条件判断:
IF @EmployeeCount > 10 PRINT '员工数量超过10人'; ELSE PRINT '员工数量不足10人'; - 循环语句:
DECLARE @i INT = 1; WHILE @i <= 5 BEGIN PRINT '当前数字:' + CAST(@i AS VARCHAR); SET @i = @i + 1; END - 错误处理:
TRY...CATCH结构:BEGIN TRY -- 可能出错的SQL语句 INSERT INTO Employees (Name, Gender) VALUES ('张三', 'X'); END TRY BEGIN CATCH PRINT '错误信息:' + ERROR_MESSAGE(); END CATCH
数据查询核心技能
1 SELECT语句基础
SELECT EmployeeID, Name, HireDate, Salary FROM Employees WHERE Gender = 'F' AND Salary > 5000 ORDER BY Salary DESC;
- 关键字顺序:
SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY。
2 聚合函数与分组查询
- 聚合函数:
COUNT()(计数)、SUM()(求和)、AVG()(平均值)、MAX()(最大值)、MIN()(最小值)。 - 分组查询:
SELECT DepartmentID, AVG(Salary) AS '平均薪资', COUNT(*) AS '人数' FROM Employees GROUP BY DepartmentID HAVING AVG(Salary) > 6000; -- 分组后过滤
3 多表连接查询
- 内连接(INNER JOIN):返回两表中匹配的行:
SELECT E.Name, D.DepartmentName FROM Employees E INNER JOIN Departments D ON E.DepartmentID = D.DepartmentID;
- 左连接(LEFT JOIN):返回左表所有行及右表匹配行(不匹配为NULL):
SELECT E.Name, D.DepartmentName FROM Employees E LEFT JOIN Departments D ON E.DepartmentID = D.DepartmentID;
- 子查询:嵌套在SELECT、WHERE、HAVING中,如:
SELECT Name FROM Employees WHERE DepartmentID = (SELECT DepartmentID FROM Departments WHERE DepartmentName = '研发部');
数据操作与视图
1 数据增删改(DML)
- 插入数据:
INSERT INTO Employees (Name, Gender, Salary) VALUES ('李四', 'M', 6000); -- 批量插入 INSERT INTO Employees (Name, Gender, Salary) SELECT '王五', 'F', 5500 UNION SELECT '赵六', 'M', 7000; - 更新数据:
UPDATE Employees SET Salary = Salary * 1.1 WHERE HireDate < '2020-01-01';
- 删除数据:
DELETE FROM Employees WHERE EmployeeID = 1;
2 视图(View)
- 作用:简化复杂查询、隐藏数据逻辑、限制数据访问。
- 创建视图:
CREATE VIEW v_EmployeeSalary AS SELECT E.Name, D.DepartmentName, E.Salary FROM Employees E INNER JOIN Departments D ON E.DepartmentID = D.DepartmentID;
- 使用视图:
SELECT * FROM v_EmployeeSalary WHERE Salary > 5000; - 注意事项:视图不存储数据(虚拟表),修改视图可能影响基表数据。
存储过程与触发器
1 存储过程(Stored Procedure)
- 优点:预编译执行(性能高)、代码复用、安全性(参数化查询防止SQL注入)。
- 创建存储过程:
CREATE PROC sp_GetEmployeeByDept @DeptID INT AS SELECT Name, Salary FROM Employees WHERE DepartmentID = @DeptID; - 调用存储过程:
EXEC sp_GetEmployeeByDept 2;
2 触发器(Trigger)
- 作用:在特定事件(INSERT/UPDATE/DELETE)发生时自动执行,用于数据完整性校验、审计等。
- DML触发器示例:
CREATE TRIGGER trg_CheckSalary ON Employees AFTER INSERT AS BEGIN IF EXISTS (SELECT 1 FROM inserted WHERE Salary < 3000) BEGIN ROLLBACK TRANSACTION; -- 回滚事务 PRINT '薪资不能低于3000元!'; END END
索引与性能优化
1 索引概述
- 作用:加速数据查询(类似书籍目录),但会降低更新速度(需维护索引结构)。
- 类型:
- 聚集索引(CLUSTERED):数据行按索引顺序物理存储(每表仅1个)。
- 非聚集索引(NONCLUSTERED):索引与数据分开存储(每表可多个)。
- 创建索引:
CREATE INDEX IX_Employee_Salary ON Employees(Salary DESC);
2 性能优化建议
- 避免全表扫描:合理使用WHERE条件、索引。
- 优化查询语句:避免SELECT *、减少子嵌套、使用EXISTS代替IN。
- 定期维护:更新统计信息(
UPDATE STATISTICS Employees)、重建索引(ALTER INDEX IX_Employee_Salary ON Employees REBUILD)。
事务管理与安全控制
1 事务(Transaction)
- ACID特性:原子性(不可分割)、一致性(数据正确)、隔离性(并发互斥)、持久性(永久保存)。
- 事务控制:
BEGIN TRANSACTION; TRY BEGIN -- SQL操作1 INSERT INTO Employees (Name, Salary) VALUES ('测试', 5000); -- SQL操作2 UPDATE Departments SET Budget = Budget - 1000 WHERE DepartmentID = 1; COMMIT TRANSACTION; -- 提交事务 END CATCH BEGIN ROLLBACK TRANSACTION; -- 回滚事务 PRINT '事务执行失败,已回滚'; END
2 安全管理
- 身份验证:Windows身份验证(推荐)、SQL Server身份验证(用户名+密码)。
- 授权管理:
-- 创建登录用户 CREATE LOGIN user_test WITH PASSWORD = '123456'; -- 创建数据库用户 CREATE USER user_test FOR LOGIN user_test; -- 授权(SELECT权限) GRANT SELECT ON Employees TO user_test;
《SQL Server实用教程(第五版)》内容全面,从基础操作到高级应用均有涵盖,通过以上笔记梳理,读者可快速掌握SQL Server的核心技能。关键在于实践:建议结合SSMS工具动手操作数据库、编写存储过程、优化查询,并在项目中应用事务管理、安全控制等知识,才能真正将理论转化为技能。
无论是数据库初学者还是开发者,这份笔记都能作为高效的学习与复习指南,助力深入理解SQL Server的原理与应用。
文章版权声明:除非注明,否则均为XMSDN - MSDN原版系统镜像 | 纯净ISO系统下载原创文章,转载或复制请以超链接形式并注明出处。


