01.项目一 SQL Server 2008基础
01.项目一 SQL Server 2008基础
Section titled “01.项目一 SQL Server 2008基础”🎯
本项目学习目标
- 了解数据库、关系模型的基本概念,能说出”表、主键、外键”是什么
- 知道 SQL Server 2008 有哪些常用版本,能根据场景选择合适版本
- 独立完成 SQL Server 2008 R2 的安装
- 熟悉 SSMS 界面,能新建查询并执行简单 SQL 语句
- 用图形化方式和 SQL 语句两种方法创建数据库和数据表
💡 先想一想:你平时用的 QQ、微信、淘宝——这些 App 里成千上万条聊天记录、订单数据,存在哪里?怎么管理的?今天我们就来揭开答案。
任务一 SQL Server 2008 概述
Section titled “任务一 SQL Server 2008 概述”🧠 理论知识
Section titled “🧠 理论知识”🗣️ 学习导入:数据库就像一个超级智能的”电子档案柜”,不仅能存数据,还能快速查找、统计、保护数据。SQL Server 是微软做的这样一套系统,在企业里非常常见。
SQL Server 是关系型数据库管理系统
Section titled “SQL Server 是关系型数据库管理系统”SQL Server 是微软开发的关系型数据库管理系统(RDBMS),基于关系模型存储和管理数据,使用 SQL(Structured Query Language)作为查询语言。
关系模型核心概念(用”学生成绩表”来理解):
- 表(Table) :就像 Excel 里的一张工作表,有行(每条记录)和列(每个字段)
- 主键(Primary Key) :每行的”唯一身份证”,比如学号,绝对不能重复也不能为空
- 外键(Foreign Key) :跨表的”关联线”,比如成绩表里的学号要对应学生表里真实存在的学号
- 事务(Transaction) :一组”要么全做、要么全不做”的操作,比如银行转账
ACID 原则:
| 原则 | 英文 | 含义 |
|---|---|---|
| 原子性 | Atomicity | 事务中的操作要么全部成功,要么全部回滚 |
| 一致性 | Consistency | 事务执行前后,数据库始终处于合法状态 |
| 隔离性 | Isolation | 并发事务互不干扰 |
| 持久性 | Durability | 提交后的数据永久保存 |
Microsoft SQL Server 发展历程
Section titled “Microsoft SQL Server 发展历程”📌 考点提示:重点记忆 2008 和 2022 两个版本的特性即可,历程表了解即可。
| 版本 | 年份 | 重要特性 |
|---|---|---|
| SQL Server 6.5 | 1996 | 第一个成熟企业级版本 |
| SQL Server 2000 | 2000 | XML支持,全文搜索 |
| SQL Server 2005 | 2005 | .NET CLR集成,列级加密,Service Broker |
| SQL Server 2008 | 2008 | TDE透明加密、数据压缩、Policy管理 |
| SQL Server 2012 | 2012 | Always On可用性组,列存储索引 |
| SQL Server 2016 | 2016 | Always Encrypted,Row-Level Security,动态数据屏蔽 |
| SQL Server 2019 | 2019 | 大数据集群,智能查询处理,Linux全面支持 |
| SQL Server 2022 | 2022 | Azure Arc集成,账本表,S3对象存储 |
SQL Server 2008 新特性(了解即可,重点是 TDE)
Section titled “SQL Server 2008 新特性(了解即可,重点是 TDE)”- 简单的数据加密(TDE) :对整个数据库文件透明加密,应用程序无需修改代码
- 增强审查(Enhanced Auditing) :细粒度审计,可跟踪SELECT等读取操作
- 自动修复页面(Automatic Page Repair) :与数据库镜像配合,自动从镜像恢复损坏数据页
- 精简的安装(Streamlined Installation) :改进的安装向导,基于策略的管理(Policy-Based Management)
SQL Server 2008 版本对比
Section titled “SQL Server 2008 版本对比”| 版本 | 适用场景 | 主要限制 |
|---|---|---|
| 企业版(Enterprise) | 大型企业,全功能 | 无限制 |
| 标准版(Standard) | 中型企业 | 4核CPU,64GB内存 |
| 工作组版(Workgroup) | 小型企业 | 2核CPU,4GB内存 |
| 开发者版(Developer) | 开发/测试(不可商用) | 功能同Enterprise |
| 简化版(Express) | 学习/小型应用,免费 | 1核,1GB内存,10GB数据库大小 |
安装前的软硬件环境要求
Section titled “安装前的软硬件环境要求”⚠️ 安装前必做:先安装 .NET Framework 3.5 SP1,否则安装程序会报错!
硬件:
- CPU:1GHz以上(推荐2GHz+,多核)
- 内存:最低512MB(企业版推荐2GB+)
- 磁盘:NTFS格式,至少2GB系统空间 + 数据存储空间
软件依赖:
- .NET Framework 3.5 SP1(必需,安装前需提前安装)
- SQL Server Native Client
- Windows Installer 4.5 及以上
NT AUTHORITY 账户区别
Section titled “NT AUTHORITY 账户区别”SQL Server 服务可以使用不同的内置 Windows 账户运行:
| 账户 | 说明 | SQL Server服务建议 |
|---|---|---|
NT AUTHORITY\SYSTEM | 操作系统内核账户,权限最高 | 不建议(权限过大) |
NT AUTHORITY\NETWORK SERVICE | 低权限网络服务账户,可访问网络 | 简单环境可用 |
NT AUTHORITY\LOCAL SERVICE | 最低权限本地服务账户,无网络访问 | 不适合SQL Server |
| 专用服务账户 | 单独创建的低权限域/本地账户 | 推荐(最小权限原则) |
🛠️ 实践操作
Section titled “🛠️ 实践操作”SQL Server 2008 R2 安装步骤
Section titled “SQL Server 2008 R2 安装步骤”-
挂载ISO,以管理员运行
setup.exe -
左侧选择”安装” → “全新SQL Server独立安装或向现有安装添加功能”
-
安装程序支持规则检查
-
输入产品密钥(或选择免费评估版)
-
接受许可条款
-
安装程序支持文件
-
功能选择(建议勾选):
- ☑ 数据库引擎服务
- ☑ SQL Server复制(Replication)
- ☑ 管理工具 - 基本(Management Tools Basic)
- ☑ 管理工具 - 完整(Management Tools Complete)
-
实例配置:默认实例(MSSQLSERVER)
-
磁盘空间要求确认
-
服务器配置:各服务配置账户(建议各服务独立账户)
-
数据库引擎配置:
- 身份验证模式选”混合模式”
- 设置 sa 账户密码(需符合复杂度)
- 添加当前Windows用户为管理员
- 完成安装,可能需重启
任务二 SQL Server 2008 管理工具
Section titled “任务二 SQL Server 2008 管理工具”🧠 理论知识
Section titled “🧠 理论知识”🗣️ 学习导入:装好 SQL Server 之后,我们要用两个工具来管理它:配置管理器(负责”开关机”和网络设置)和 SSMS(写 SQL、看数据的主战场)。
SQL Server 配置管理器
Section titled “SQL Server 配置管理器”配置管理器(SQL Server Configuration Manager)负责:
- 管理SQL Server各服务(启动/停止/暂停)
- 配置网络协议(TCP/IP、Named Pipes、Shared Memory)
- 配置服务账户和启动参数
重要网络协议:
| 协议 | 说明 | 默认状态 |
|---|---|---|
| Shared Memory | 本机进程间通信,无需网络 | 启用 |
| Named Pipes | 局域网通信,基于Windows命名管道 | 禁用 |
| TCP/IP | 标准网络通信,端口1433 | 启用(生产环境) |
SSMS(SQL Server Management Studio)
Section titled “SSMS(SQL Server Management Studio)”SSMS 是SQL Server的综合图形化管理界面:
主要组成部分:
- 对象资源管理器(Object Explorer) :树形浏览服务器/数据库/表等所有对象,快捷键
F8 - 查询编辑器(Query Editor) :编写和执行T-SQL,快捷键
Alt+N新建 - 结果窗格:显示查询结果(网格/文本/文件模式)
- 属性窗口:查看选中对象属性,快捷键
F4
SSMS 常用快捷键:
| 快捷键 | 功能 |
|---|---|
F5 | 执行全部查询 |
Ctrl+E | 执行选中代码 |
Ctrl+F5 | 分析查询语法(不执行) |
F8 | 显示/隐藏对象资源管理器 |
F4 | 显示属性窗口 |
Alt+N | 新建查询窗口 |
Ctrl+K, Ctrl+C | 注释选中代码 |
Ctrl+K, Ctrl+U | 取消注释 |
Ctrl+L | 显示预估执行计划 |
Ctrl+M | 启用实际执行计划 |
SQL Server 数据库对象
Section titled “SQL Server 数据库对象”| 对象类型 | 说明 |
|---|---|
| 数据库(Database) | 相关对象的集合,数据的逻辑容器 |
| 数据表(Table) | 行列结构的数据存储单元 |
| 视图(View) | 基于SELECT查询定义的虚拟表,简化复杂查询 |
| 存储过程(Stored Procedure) | 预编译的SQL代码块,提升性能和安全性 |
| 函数(Function) | 返回值的可重用代码(标量函数/表值函数) |
| 触发器(Trigger) | 数据变化时自动执行(INSERT/UPDATE/DELETE触发) |
| 索引(Index) | 加速查询的B树数据结构 |
| 数据库关系图(Diagram) | 可视化ER关系图 |
SQL 语言分类
Section titled “SQL 语言分类”| 分类 | 全称 | 主要语句 | 功能 |
|---|---|---|---|
| DDL | 数据定义语言 | CREATE、ALTER、DROP、TRUNCATE | 定义数据库结构 |
| DML | 数据操作语言 | INSERT、UPDATE、DELETE | 增删改数据 |
| DQL | 数据查询语言 | SELECT | 查询数据 |
| DCL | 数据控制语言 | GRANT、DENY、REVOKE | 权限管理 |
| TCL | 事务控制语言 | BEGIN TRAN、COMMIT、ROLLBACK | 事务管理 |
🛠️ 实践操作
Section titled “🛠️ 实践操作”打开配置管理器和管理服务
Section titled “打开配置管理器和管理服务”# 打开配置管理器(图形界面)# 开始 → SQL Server 2008 → 配置工具 → SQL Server 配置管理器# 或运行:SQLServerManager10.msc
# 命令行启动/停止服务net start MSSQLSERVER # 启动默认实例net stop MSSQLSERVER # 停止默认实例
# 若为命名实例(如MSSQLSERVER\MYINSTANCE)net start "MSSQL$MYINSTANCE"SSMS 基本操作
Section titled “SSMS 基本操作”-- 连接服务器后,新建查询(Alt+N)-- 执行以下代码测试连接SELECT @@VERSION AS SQLServerVersion;SELECT @@SERVERNAME AS ServerName;SELECT GETDATE() AS CurrentDateTime;SELECT DB_NAME() AS CurrentDatabase;
-- 显示行号:工具 → 选项 → 文本编辑器 → Transact-SQL → 行号 勾选-- 设置字体大小:工具 → 选项 → 字体和颜色任务三 SQL Server 2008 数据库图形化操作
Section titled “任务三 SQL Server 2008 数据库图形化操作”🧠 理论知识
Section titled “🧠 理论知识”🗣️ 学习导入:本任务我们用”鼠标操作”来完成建库建表,先建立直观感受,任务四再用 SQL 语句实现同样的效果。两种方式都要掌握!
⚠️ 注意:永远不要手动修改或删除
master数据库!
SQL Server 安装后自动创建4个系统数据库:
| 数据库 | 说明 | 备份必要性 |
|---|---|---|
| master | 记录所有数据库信息、登录账户、系统配置,是SQL Server的核心 | 必须定期备份 |
| tempdb | 临时表、排序操作的工作区,每次SQL Server重启都会重建 | 无需备份 |
| model | 新建数据库的模板,新库继承model的设置和对象 | 若有自定义则备份 |
| msdb | SQL Server代理服务使用,存储作业、警报、备份历史 | 建议备份 |
| 类型 | 说明 | 实现方式 |
|---|---|---|
| 实体完整性 | 每行有唯一标识符 | PRIMARY KEY |
| 域完整性 | 列值在有效范围内 | CHECK约束、数据类型、NOT NULL |
| 引用完整性 | 外键值必须在被引用表中存在 | FOREIGN KEY |
| 用户定义完整性 | 特定业务规则 | 触发器、存储过程 |
约束类型详解
Section titled “约束类型详解”| 约束 | 作用 | 示例 |
|---|---|---|
| NOT NULL | 禁止空值 | sname NVARCHAR(20) NOT NULL |
| PRIMARY KEY | 主键(唯一+非空) | CONSTRAINT PK_stu PRIMARY KEY(sno) |
| UNIQUE | 唯一性(允许一个NULL) | CONSTRAINT UQ_email UNIQUE(email) |
| CHECK | 值域检查 | CHECK(age BETWEEN 15 AND 60) |
| DEFAULT | 默认值 | score DECIMAL(5,2) DEFAULT 0 |
| FOREIGN KEY | 外键引用 | FOREIGN KEY(cno) REFERENCES course(cno) |
SQL Server 主要数据类型
Section titled “SQL Server 主要数据类型”| 类别 | 数据类型 | 说明 |
|---|---|---|
| 整数 | TINYINT(0~255), SMALLINT, INT, BIGINT | 1/2/4/8字节 |
| 小数 | DECIMAL(p,s), NUMERIC(p,s) | 精确小数;FLOAT/REAL 近似 |
| 字符串 | CHAR(n), VARCHAR(n), TEXT | 定长/可变长/大文本 |
| Unicode | NCHAR(n), NVARCHAR(n), NTEXT | 中文必须用N前缀类型 |
| 日期时间 | DATE, TIME, DATETIME, DATETIME2 | 推荐用DATETIME2(精度更高) |
| 二进制 | BINARY(n), VARBINARY(n) | 存储加密数据、图片等 |
| 其他 | BIT(0/1), UNIQUEIDENTIFIER(GUID), XML | 布尔/GUID/XML |
🆕 新技术补充:SQL Server 2022 中
JSON类型已被原生支持。存储中文字符串推荐NVARCHAR(MAX)代替已废弃的NTEXT,日期时间推荐DATETIME2代替DATETIME(精度从毫秒提升到100纳秒)。
🛠️ 实践操作
Section titled “🛠️ 实践操作”创建 stusta 数据库及三张数据表
Section titled “创建 stusta 数据库及三张数据表”-- 创建数据库CREATE DATABASE stustaON PRIMARY ( NAME = 'stusta_data', FILENAME = 'C:\SQLData\stusta.mdf', SIZE = 10MB, MAXSIZE = 500MB, FILEGROWTH = 10MB)LOG ON ( NAME = 'stusta_log', FILENAME = 'C:\SQLData\stusta_log.ldf', SIZE = 5MB, FILEGROWTH = 5MB);GO
USE stusta;GO
-- 创建学生表CREATE TABLE stu ( sno CHAR(10) NOT NULL, sname NVARCHAR(20) NOT NULL, gender CHAR(2) CHECK(gender IN ('男','女')), age TINYINT CHECK(age BETWEEN 15 AND 60), dept NVARCHAR(30), CONSTRAINT PK_stu PRIMARY KEY(sno));
-- 创建课程表CREATE TABLE course ( cno CHAR(6) NOT NULL, cname NVARCHAR(50) NOT NULL, credit TINYINT CHECK(credit BETWEEN 1 AND 10), CONSTRAINT PK_course PRIMARY KEY(cno));
-- 创建成绩表(含外键)CREATE TABLE score ( sno CHAR(10) NOT NULL, cno CHAR(6) NOT NULL, grade DECIMAL(5,2) CHECK(grade BETWEEN 0 AND 100), CONSTRAINT PK_score PRIMARY KEY(sno, cno), CONSTRAINT FK_score_stu FOREIGN KEY(sno) REFERENCES stu(sno), CONSTRAINT FK_score_course FOREIGN KEY(cno) REFERENCES course(cno));💡 补充说明:创建数据库时不是必须指定文件位置和日志位置。如果省略
ON PRIMARY和LOG ON子句,SQL Server 会使用默认设置:
- 默认数据文件位置:通常在
C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ - 默认文件名:数据库名.mdf(数据文件)和数据库名_log.ldf(日志文件)
- 默认初始大小:继承
model数据库的设置 - 默认增长方式:数据文件按 1MB 增长,日志文件按 10% 增长
-- 最简化的创建数据库语句(推荐新手使用)CREATE DATABASE stusta;GO
-- 等价于以下完整语句(使用默认设置)CREATE DATABASE stustaON PRIMARY ( NAME = 'stusta', FILENAME = 'C:\Program Files\Microsoft SQL Server\...\DATA\stusta.mdf', SIZE = 5MB, FILEGROWTH = 1MB)LOG ON ( NAME = 'stusta_log', FILENAME = 'C:\Program Files\Microsoft SQL Server\...\DATA\stusta_log.ldf', SIZE = 1MB, FILEGROWTH = 10%);GO⚠️ 生产环境建议:虽然可以使用默认设置,但在企业项目中建议明确指定文件位置和大小,原因如下:
- C盘空间有限,大型数据库应放在专用数据盘(如D盘或E盘)
- 便于备份管理和磁盘I/O优化
- 避免数据文件自动增长导致的性能问题
- 符合企业数据库管理规范
-- 添加列ALTER TABLE stu ADD phone NVARCHAR(20);
-- 修改列数据类型(注意:修改类型可能导致数据丢失)ALTER TABLE stu ALTER COLUMN phone VARCHAR(20);
-- 删除列ALTER TABLE stu DROP COLUMN phone;
-- 设置表约束(添加CHECK约束)ALTER TABLE stu ADD CONSTRAINT CK_gender CHECK(gender IN ('男','女'));任务四 SQL Server 2008 SQL语句操作
Section titled “任务四 SQL Server 2008 SQL语句操作”🧠 理论知识
Section titled “🧠 理论知识”🗣️ 学习导入:之前用鼠标点出来的操作,现在用”代码”来完成。SQL 是通用语言——不管是 MySQL、Oracle 还是 SQL Server,核心语法几乎一样!学会了终身受益。
📚
SQL 语言记忆口诀:增删改查对应 INSERT / DELETE / UPDATE / SELECT;建改删结构对应 CREATE / ALTER / DROP
DDL 语句语法
Section titled “DDL 语句语法”-- 创建数据库CREATE DATABASE teasta;
-- 删除数据库DROP DATABASE teasta;
-- 创建表CREATE TABLE class ( class_id INT NOT NULL IDENTITY(1,1), -- 自增主键 class_name NVARCHAR(50) NOT NULL, teacher NVARCHAR(20), CONSTRAINT PK_class PRIMARY KEY(class_id));
-- 修改表ALTER TABLE class ADD description NVARCHAR(200); -- 加列ALTER TABLE class DROP COLUMN description; -- 删列
-- 删除表DROP TABLE class;DML 语句
Section titled “DML 语句”-- 插入单行INSERT INTO stu(sno, sname, gender, age, dept)VALUES('2024001', '张三', '男', 20, '计算机系');
-- 批量插入INSERT INTO stu VALUES ('2024002', '李四', '女', 19, '数学系'), ('2024003', '王五', '男', 21, '物理系');
-- 更新数据UPDATE stu SET age = 21, dept = '软件工程系'WHERE sno = '2024001';
-- 删除指定数据DELETE FROM stu WHERE sno = '2024001';
-- 清空表(不记录日志,无法回滚,速度快)TRUNCATE TABLE stu;SELECT 查询语句详解
Section titled “SELECT 查询语句详解”-- 1. 查询全部列SELECT * FROM stu;
-- 2. 查询指定列SELECT sno, sname, age FROM stu;
-- 3. 列别名SELECT sno AS '学号', sname AS '姓名', age AS '年龄' FROM stu;
-- 4. 计算表达式SELECT sname, age, age + 1 AS '明年年龄' FROM stu;
-- 5. 去重SELECT DISTINCT dept FROM stu;
-- 6. WHERE 条件SELECT * FROM stu WHERE gender = '男' AND age > 20;SELECT * FROM stu WHERE age BETWEEN 18 AND 22;SELECT * FROM stu WHERE dept IN ('计算机系', '软件工程系');SELECT * FROM stu WHERE sname LIKE '张%'; -- 以张开头SELECT * FROM stu WHERE sname LIKE '_三'; -- 第二个字是三
-- 7. 聚合函数SELECT COUNT(*) AS 总人数, AVG(CAST(age AS FLOAT)) AS 平均年龄, MAX(age) AS 最大年龄, MIN(age) AS 最小年龄FROM stu;
-- 8. GROUP BY 分组SELECT dept, COUNT(*) AS 人数, AVG(CAST(age AS FLOAT)) AS 平均年龄FROM stuGROUP BY deptHAVING COUNT(*) >= 2;
-- 9. ORDER BY 排序SELECT * FROM stu ORDER BY age DESC, sname ASC;
-- 10. 多表JOIN查询SELECT s.sno, s.sname, c.cname, sc.gradeFROM stu sINNER JOIN score sc ON s.sno = sc.snoINNER JOIN course c ON sc.cno = c.cnoWHERE sc.grade >= 60ORDER BY sc.grade DESC;
-- 11. 子查询(成绩高于平均分的学生)SELECT sname, sno FROM stuWHERE sno IN ( SELECT sno FROM score WHERE grade > (SELECT AVG(grade) FROM score));