news 2026/11/4 15:55:57

SQL Server 2019入门:从安装到第一条SQL查询

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL Server 2019入门:从安装到第一条SQL查询

很多朋友来找我问数据库入门的路子,我都会直接推荐从 SQL Server 2019 开始。倒不是说它比别的数据库高级多少,而是它的学习曲线比较平滑,从安装到写出一条能用的 SQL,再到理解表、索引、事务这些核心概念,每一步都有图形界面兜底。你就算完全没接触过数据库,也可以在一个晚上装好环境、跑通第一句 SELECT,第二天再开始啃语法细节。

这篇是系列教程的第一篇,主题就是“初识 SQL Server 2019”。我会把语法知识点和使用方法的基础盘都过一遍,给你一个完整的动手路径,而不是上来就堆一堆术语。你只需要准备一台能联网的电脑,按着步骤往下走就行。后面几篇会逐步深入查询优化、存储过程、备份恢复这些进阶内容,但这一篇的目标很简单:把环境搭好,把库里最基本的“增删改查”跑通,让你对数据库不再有黑盒感。

1. SQL Server 2019 到底是什么,值不值得学

1.1 它能解决什么问题

SQL Server 2019 本质上是一套关系型数据库管理系统,你可以把它理解为一个“专门管理数据的仓库”。你的业务数据、订单记录、用户信息、日志数据,都可以交给它存储。它有非常完整的约束机制来保证数据不乱,比如主键保证唯一性,外键保证关联关系,事务保证多步骤操作要么全部成功、要么全部回滚。这是 Excel 表格完全做不到的。

你可能想问,为什么要专门学一个数据库?直接用文件存储不行吗?我的回答是,如果你的程序只有一个用户、数据量几百行,直接写文件确实够用。但一旦到了多人并发访问、数据量上来、要求不能丢数据、要能快速查询统计的时候,数据库就成了唯一的正解。SQL Server 2019 正是这个场景下非常成熟的选择,它在企业环境里被大量使用,网上随便搜都能找到足够多的案例和文档,遇到问题也能快速搜到答案。

1.2 和 MySQL、Oracle 比,它的优势在哪里

很多人会纠结“学哪个数据库好”。我的建议是,如果你不是有明确的工作岗位要求,那 SQL Server 2019 是一个很适合拿来打的底子。原因有几点。

第一,SQL 是一种标准语言,你在 SQL Server 里学会的增删改查、GROUP BY、JOIN,换到 MySQL、PostgreSQL 上大部分都是通用的,差别主要在一些函数名和细节语法上。所以不存在“学了它就用不了别的”的问题。

第二,SQL Server 的图形化工具非常成熟。SSMS(SQL Server Management Studio)从安装到建表、调索引、看执行计划,几乎都能用鼠标完成。这对初学阶段建立“数据库长什么样”的直观感受特别有帮助。不像某些数据库,初学者光配一个命令行环境就要折腾半天。

第三,2019 这个版本是目前生命周期内非常稳的一个。它新增了不少智能化功能,比如智能查询处理、内存中的行存储支持,聚簇列存储索引也做了增强,UTF-8 支持也更完善了。这些都是生产环境里很实用的点。我们入门阶段不会全部涉及,但说明这个版本踩在了一个比较成熟的技术节点上,学完不会马上过时。

1.3 什么人适合按这个系列走

我建议以下几类人直接跟着动手做:刚接触编程、想给自己的应用配数据库的学生;做数据分析、希望从数据库里按条件取数的业务人员;以及运维或开发转岗、想补数据库基础的朋友。

如果你已经对 SQL 有一定经验,这篇可能会偏基础,但你可以重点看第 5、6 章,我把容易踩的坑和排查思路做了汇总,对你也有参考价值。如果你完全零基础,那就老老实实从第 3 章开始操作,每一步都不要跳过。

2. 学习路径设计:先动手建实例,再回头补理论

2.1 为什么别一上来就啃语法书

我见过太多初学者买了一本厚厚的 SQL 教程,从第一页开始做笔记,结果看到第三章就放弃了。原因是纯理论在没有“数据场景”的时候非常抽象。你连一个表都没建过,看再多的“SELECT 列名 FROM 表名 WHERE 条件”也记不住。

正确的顺序应该反过来。先在自己电脑上装一个 SQL Server 2019 实例,跟着文章建一个库、建一张表、插入几条数据,再对着这些数据去理解语法。一旦你看到了“操作数据库=执行一段可验证的代码”这个事实,后面那些概念就都有了锚点。说白了,给小孩讲“什么是整理房间”,不如直接让他把玩具按类别放一次。

我在带身边新人的时候也一直强调:每个语法点都要配一次可以重复执行的操作,比如写一条 SELECT 你就真的去查一下,看返回的结果和你预期是否一致。反射弧越短,知识固化越快。

2.2 工具选型:SSMS为主,Azure Data Studio为辅

SQL Server 2019 的官方图形界面工具主要有两个。

第一个是 SSMS,全称 SQL Server Management Studio。它是用来管理实例、建库建表、写查询最主力的工具。你要查询、建索引、看执行计划,都靠它。它的缺点是有时候对高分辨率屏幕适配不好,而且只支持 Windows 平台,但这不影响它作为入门首选工具的地位。

第二个是 Azure Data Studio,它跨平台,风格更像现在的代码编辑器,很多轻量查询任务用它确实更顺手。我建议的用法是:入门阶段一直用 SSMS,因为它把“服务器对象”展示得清晰,非常适合理解实例、数据库、登录名这些层级关系;等你熟悉了基本概念,再切换到 Azure Data Studio 体验更现代的编辑体验也不迟。

2.3 这个系列的内容安排

既然标题是“从入门到精通”,我会按一套递进的顺序来拆。第一篇也就是本文,讲清楚安装部署、工具使用、核心概念、最简单的新增删除修改查询,以及新手最容易翻车的故障排查。第二篇重点讲查询进阶,包括多表查询、各种 JOIN、子查询、聚合分组。第三篇会进入表设计、约束、索引、视图。第四篇讲存储过程、触发器、事务与并发控制。再往后是性能优化和日常备份恢复。

你如果只是临时用一下,可以只看第一篇到第三篇;如果要从事数据库开发或者运维相关工作,那后面几篇都得跟完。每一篇都尽量做到“给结论、给操作、给原因”,不搞空谈。

3. 环境准备:从下载安装到打开第一个查询窗口

3.1 版本选择:下载开发版而不是企业版

很多人安装的时候会在版本列表里纠结,这里直接给你结论:学习用,选 Developer(开发版)就行。这个版本功能上和企业版几乎一致,而且完全免费,唯一的限制是不能用于生产环境。等你以后真正做项目部署,再考虑 Standard 或 Enterprise 授权,那是后话。

去官网找到 SQL Server 2019 的下载页面,选择 Developer 版本下载。下载下来是一个安装程序,一般几十到一百多 MB,它会引导你选择安装模式。新手选“基本”模式也可以,不过我更建议选“自定义”模式,因为后面能手动确认实例名和安装路径,心里更有数。

3.2 安装过程中的关键选项

安装向导到“功能选择”这一步时,你可能会看到一堆组件:数据库引擎服务、Analysis Services、Reporting Services、Integration Services 等等。一开始只需要保留“数据库引擎服务”和“客户端工具连接”相关项。Analysis Services 是 BI 分析服务,Reporting Services 是报表服务,Integration Services 是数据集成服务,这三个入门阶段用不上,不勾选能减少安装时间,以后需要再补装就行。

到“实例配置”页面,你会看到“默认实例”和“命名实例”两个选项。默认实例的实例名是 MSSQLSERVER,连接时直接用机器名就能连。命名实例则需要以“机器名\实例名”的格式连接。初学者我建议选默认实例,省事。但如果你本机已经装过其他版本的 SQL Server,默认实例已经被占了,就得自己起一个命名实例,比如 SQL2019。

身份验证模式这里很关键。它会问你要选“Windows 身份验证模式”还是“混合模式”。Windows 身份验证模式意味着只能用系统账号登录;混合模式则允许用 SQL 账号比如 sa 来登录。我建议直接选“混合模式”,然后给 sa 账户设置一个足够强的密码。原因很好理解:学习过程中你会反复用不同数据库客户端来连接,仅靠 Windows 验证有时候会绕弯路。记住,sa 是系统管理员的缩写,权限非常大,密码别设成 admin、123456 这种,至少包含大小写字母、数字和特殊字符。

排序规则一般保持默认,中文环境下默认的 Chinese_PRC_CI_AS 通常够用,CI 表示不区分大小写,AS 表示区分重音。除非你有特殊的语言排序需求,否则不用改。

3.3 安装完成后确认服务状态

安装完成后,你可以在 Windows 的服务列表里找到 SQL Server (MSSQLSERVER) 这个服务。如果它状态不是“正在运行”,右键启动即可。这一步很多人会漏掉,之后 SSMS 连不上,第一反应是怀疑自己装错了,实际上只是服务没启动。

接下来安装 SSMS。安装包在下载页面里也有独立入口。装好以后打开 SSMS,弹出的“连接到服务器”窗口里,服务器类型选“数据库引擎”,服务器名称一般填本机名或“localhost”就行。如果装的是命名实例,则填“localhost\实例名”。身份验证选“SQL Server 身份验证”,输入 sa 和密码。起初连接不上很正常,后面第 6 章我会专门讲排查。

连接成功以后,你会看到一个对象资源管理器,左侧可以展开:数据库、安全性、服务器对象、复制、管理这些节点。到这里,你的第一个 SQL Server 2019 实例就已经跑起来了。

4. 核心概念扫盲:搞懂实例、数据库、表、字段和数据类型

4.1 实例和数据库到底是什么关系

这是第一个容易绕晕的概念。一个 SQL Server 实例可以被理解为一个独立的数据库服务进程,它管理着若干数据库。一个实例里可以建很多个数据库。数据库之间是隔离的,你在业务库里的操作不会影响系统库。实例就好比一栋楼,数据库就像楼里的各个房间,房间里的桌子、柜子则是表。

在 SSMS 里,你连接上实例后能看到“数据库”文件夹,展开里面有系统数据库和你自己创建的库。以后你做任何操作,都要先意识到自己正在哪个实例、哪个库下面执行。写 SQL 的时候如果想切换库,可以用一段批次语句:

USE MyDatabase; GO

这里执行了 USE 之后,后续的查询语句就默认在 MyDatabase 下执行了。这个“当前库”的上下文概念非常基础,却经常被新手忽略。

4.2 系统数据库有什么用,能不能删

初次展开数据库节点,你可能会看到 master、model、msdb、tempdb 四个库。它们不是让你存业务数据的,各有分工。

master 是老大,它记录了实例级别的所有元数据,包括登录账号、配置、其他数据库的位置。model 是模板库,每次新建数据库时都会复制它作为基础,所以有人会在 model 里做统一设置。msdb 被 SQL Server Agent 用来存储作业、报警、备份历史等信息。tempdb 则是临时数据的存放处,你的临时表、排序中间结果都在这里,重启实例后它的内容是重置的。

这四个库都不要乱碰,尤其是 master,改坏了整个实例可能起不来。平时你只需要关心自己创建的库。

4.3 数据类型:varchar 和 nvarchar 的坑

建表时你必须给每个字段指定数据类型。常用的有:

  • int:整数,适合存储数量、年龄、编号。
  • decimal(p,s):精确小数,比如价格、金额。
  • varchar(n):非 Unicode 可变长度字符,n 表示最大字符数,比如 varchar(50)。
  • nvarchar(n):Unicode 可变长度字符,也是最多 n 个字符。
  • datetime / datetime2:日期时间。
  • bit:布尔值,0 或 1。
  • uniqueidentifier:GUID,适合作为分布式环境下的主键。

这里我特别想说一下 varchar 和 nvarchar 的区别。varchar 每个非 Unicode 字符占 1 个字节,nvarchar 每个字符占 2 个字节。如果要在同一个列里混合存中英文,建议用 nvarchar,否则某些字符集环境下中文会变成乱码或者存不进去。很多老系统里中文乱码问题,追到底就是建表时用了 varchar 而不是 nvarchar。作为入门习惯,处理用户可见的文本字段,我一般默认用 nvarchar。

4.4 主键、外键和索引,先记住这三个作用

主键(Primary Key)用来唯一标识一行。比如用户表里的 UserID,它不可能重复,也不允许为空。没有主键的表,你在做修改、删除时会面临“到底要改哪一行”的尴尬。唯一索引其实也有类似作用,但主键还有一个额外的重要意义,就是它是表结构设计的基础。

外键(Foreign Key)用来建立表与表之间的关联。比如订单表里有一个 CustomerID 指向客户表的主键,这个 CustomerID 就是外键。它保证了不会出现“订单引用了不存在的客户”这种情况。初学者不一定要把每个表都设计出外键,但一定要理解这种“有关系”的思维。

索引(Index)最核心的价值是加速查询。它有点像书的目录,没有索引时 SQL Server 要一页一页翻整张表,有索引时能直接跳到目标位置。入门阶段不需要手动建太多种索引,但要知道:主键会自动创建一个聚簇索引,频繁用于查询条件的列(比如 WHERE 子句中的列)适合建二级索引。

5. 语法知识点与实操:写出你的第一条完整 SQL

5.1 SELECT 查询语句的完整骨架

SQL 里最常用也最好入门的语句就是 SELECT。最基本的写法是:

SELECT * FROM Users;

这个语句会把 Users 表里的所有列、所有行全部查出来。星号表示“所有列”,初学者用起来很爽,但不建议长期依赖。更好的习惯是只写你需要的列:

SELECT UserID, UserName, Email FROM Users;

接下来加上筛选条件。WHERE 后面跟的是行的过滤器:

SELECT UserID, UserName FROM Users WHERE UserID > 100;

这段的意思是:从 Users 表里取出 UserID 大于 100 的用户,并只显示 UserID 和 UserName 两列。你会发现 SQL 语句读起来和英语差不多,这也是它好上手的原因之一。

5.2 INSERT、UPDATE、DELETE:三个方向的基本操作

往表里加数据,用 INSERT 语句:

INSERT INTO Users (UserID, UserName, Email) VALUES (1, N'张三', N'zhangsan@example.com');

注意字符串外面是单引号,不是双引号。字符串里如果有中文,我习惯在前面加一个 N,表示后面的字符串是 Unicode 类型,避免因客户端字符集转换导致乱码。

修改数据,用 UPDATE:

UPDATE Users SET Email = N'new@example.com' WHERE UserID = 1;

删除数据,用 DELETE:

DELETE FROM Users WHERE UserID = 1;

这里有一条我反复强调的规则:UPDATE 和 DELETE 如果没有 WHERE,那就是对整张表动手。比如:

DELETE FROM Users;

这条语句会把 Users 表里的所有行全部删除。生产环境里这种操作如果发生,只能靠备份恢复。所以我的习惯是,写 UPDATE 和 DELETE 之前先写一条 SELECT 确认范围,比如你要删除 UserID=1 的用户,先执行:

SELECT * FROM Users WHERE UserID = 1;

确认返回的就是你目标行,再加 WHERE 去执行 DELETE。多花十秒钟,能避免一次事故。

5.3 完整示例:建库、建表、插入数据、查询

下面我带你跑一遍完整的流程。首先创建一个练习库:

CREATE DATABASE DemoDB; GO USE DemoDB; GO

然后创建一张学生表:

CREATE TABLE Students ( StudentID INT PRIMARY KEY, StudentName NVARCHAR(50) NOT NULL, Age INT, City NVARCHAR(50) );

插入三条数据:

INSERT INTO Students (StudentID, StudentName, Age, City) VALUES (1, N'王小明', 20, N'上海'); INSERT INTO Students (StudentID, StudentName, Age, City) VALUES (2, N'李小红', 21, N'北京'); INSERT INTO Students (StudentID, StudentName, Age, City) VALUES (3, N'张伟', 22, N'广州');

查询所有数据:

SELECT * FROM Students;

再试试带条件查询:

SELECT StudentName, City FROM Students WHERE Age > 20;

你在 SSMS 里新建一个查询窗口,把这些语句按顺序粘进去,选中后按 F5 执行。执行完可以在下方“消息”或“结果”页签看到反馈。这一步做完,你就已经把数据库从创建到增删改查的闭环走通了。

5.4 写 SQL 的四个好习惯

第一,语句结束加分号。虽然 SQL Server 没有强制要求每条语句都以分号结尾,但加上分号能让语句边界清晰,尤其在一次性执行多段脚本时不容易出错。

第二,写注释。单行注释用两个短横线开头:

-- 查询年龄大于20的学生 SELECT StudentName FROM Students WHERE Age > 20;

多行注释用斜杠加星号包裹。你以后会维护别人的脚本,也会被别人维护你的脚本,注释是对大家的一种尊重。

第三,适当换行缩进。SQL 不像 Python 那样强制缩进,但 WHERE、ORDER BY、GROUP BY 这些子句各换一行,阅读起来清爽很多,排查问题的时候一眼就能定位到问题子句。

第四,在执行非查询语句前,默认它可能影响很多行。无论是 UPDATE 还是会改结构的 ALTER TABLE,先评估影响范围,再执行。最好先在测试库里跑通了再上正式环境。

6. 新手高频问题排查手册

6.1 安装完成后 SSMS 连不上本地实例

最常见的原因是服务没启动。按 Windows 的 Win+R 键,输入 services.msc 回车,找到 SQL Server (MSSQLSERVER),确认状态为“正在运行”。如果服务是启动状态但还是连不上,再检查一下连接用的服务器名称是否正确。默认实例填 localhost,命名实例填 localhost\实例名。还有一种可能,是 TCP/IP 协议没有启用。

打开 SSMS 后连不上,可以在“服务器名称”旁边点“选项”,切到“协议”页签,尝试强制 TCP/IP 连接。如果仍然失败,打开 SQL Server 配置管理器,在“SQL Server 网络配置”里找到实例对应的协议,把 TCP/IP 启用,然后重启 SQL Server 服务。这一招解决了很多奇奇怪怪的本地连接问题。

6.2 使用 sa 登录报错:用户登录失败,错误 18456

这个错误几乎每个人都会遇到。错误码 18456 表示身份验证失败。常见原因是服务端身份验证模式没改成“混合模式”。

解决方法是先用 Windows 身份验证连上实例,然后在实例上右键选择“属性”,找到“安全性”,勾选“SQL Server 和 Windows 身份验证模式”,点确定,最后重启 SQL Server 服务。

还有一个很容易被忽略的问题,就是 sa 账户被禁用。你可以在 SSMS 中展开“安全性”->“登录名”,找到 sa,右键属性,检查账户状态,确保“登录”选项是“已启用”,如果有“强制密码策略”,对本地学习环境可以暂时取消。

6.3 执行查询后中文字符变成问号或乱码

如果你插入中文以后查出来是问号,大概率是字段类型问题。检查建表语句中字符类型是不是 nvarchar。如果是 varchar 且数据库排序规则不支持中文,就很容易出问题。

另外,在插入语句里给中文字符串前加 N 前缀,也是一个很管用的办法。N 在这里不是英语缩写,而是表示后面跟着的是 Unicode 字符串。下面这行就安全很多:

INSERT INTO Students (StudentName) VALUES (N'王小明');

6.4 不小心执行了没有 WHERE 的 DELETE,数据被清空了,怎么办

这个问题提醒我们学习数据库一定要有备份意识。如果在练习环境,数据丢了还能重插;如果在真实环境,只能从备份恢复。SQL Server 在恢复模式下可以通过事务日志做时间点恢复,但那需要提前把数据库设置为完整恢复模式,并且有日志备份链。

作为初学者,你至少要养成一个习惯:每做完一批练习性操作,就做一次完整备份。SSMS 里对数据库右键,选择“任务”->“备份”,备份类型选“完整”,选择路径后点确定。这不会花多少时间,但会给你随时重来的底气。

6.5 想看示例库练手,但不知道去哪里找

官方提供了一个常用示例数据库叫 AdventureWorks,它有多个版本,对应不同的 SQL Server 版本。你可以从官方文档或 GitHub 上找到 .bak 备份文件。下载后,在 SSMS 中对数据库节点右键,选择“还原数据库”,来源选择“设备”,加载 .bak 文件,然后确定。还原完成后,你就可以用里面的几百张表来练 JOIN 和复杂查询了。这个库我已经推荐给很多人,上面的订单、产品、人员数据非常真实,比你自己造数据练手要高效得多。


最后分享一点个人体会。刚接触 SQL Server 的时候,我也走过一阵弯路,总想把每一处细节都弄明白,结果很快被一大堆术语淹没。后来我发现,最有效的办法仍然是“动手驱动理解”。你不需要先弄懂每一个理论细节,你只需要把一个最小的链跑通:创建一个库,建一张表,插入几行数据,查出你要的结果。只要这个链路通了,你后续学习 JOIN、索引、事务,都会变得有方向感。第二篇我会直接带大家进入查询进阶,把 SELECT 的威力彻底释放出来。在那之前,建议你把今天的内容亲手做一遍,尤其是建库建表那一段,别光看不练。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/29 18:36:53

AI Agent工程化实战:Skills技能拆解与工作流编排指南

1. 从"能聊"到"能干":为什么Agent需要一套工程工作流很多人第一次接触AI Agent,兴奋点都在"它能自己调工具了"。但真正把Agent放进生产环境跑过几轮的人,心态会迅速从兴奋转向焦虑——因为它太不稳定了。同一个…

作者头像 李华
网站建设 2026/10/30 5:23:04

工业物联网四层架构与预测性维护落地实践

简介:本资源是一份面向制造业数字化转型从业者、工业自动化工程师及高校相关专业师生的深度技术课件,系统解析工业物联网(IIoT)如何赋能智能制造落地。内容严格对标《国家智能制造标准体系建设指南》,完整覆盖智能制造…

作者头像 李华
网站建设 2026/10/30 6:47:00

计算机网络】吃透 OSI 七层模型与 TCP/IP 协议栈

前言做后端开发、服务器运维,网络是绕不开的基础。很多同学背了七层名字,却不懂分层的意义,不知道数据包从浏览器发出到服务器,每一层到底发生了什么封装。分层思想核心:下层为上层提供服务,上层不用关心下…

作者头像 李华
网站建设 2026/10/31 7:25:15

GPU调度优化实战:从推理负载错配到动态批处理与显存超卖

做模型推理服务的人,没有不被 GPU 调度折腾过的。今年我把几个推理服务的 GPU 调度机制完整梳理了一遍,起因很简单:集群里明明还有不少空闲算力,新服务却经常提示资源不足;等我把调度策略调整之后,同样的负…

作者头像 李华
网站建设 2026/10/31 12:46:59

Agent Runtime 编排实战:从工具调用到稳定任务执行

1. 为什么“会调工具”不等于“能做编排”过去一年我参与过三个不同规模的 Agent 项目,从最初级的“单模型加几个函数调用”,到后来需要协调十几个子任务、跨多个执行环境的中型系统,踩过的坑几乎都指向同一个认知偏差:很多人把 A…

作者头像 李华