
装SQL Server 2019这事说难不难说简单也容易踩坑。我最早接触SQL Server还是2008 R2时代一路用到2019中间换过MySQL、PostgreSQL但说实话微软这套东西在Windows生态下的体验尤其是对新手来说是真的省心——图形化界面点一点就能装好装完连上就能跑不太需要像某些开源数据库那样折腾半天配置文件。这篇文章就基于我自己装过不下二十次的经验把SQL Server 2019从下载安装到基础使用的完整流程过一遍包括装完怎么验证、怎么用SSMS建库建表、怎么写最基础的SQL语句以及真正容易翻车的几个坑。适合谁看刚接触数据库的学生、要从MySQL转过来的开发者、公司里需要搭一套内部测试库的运维同学还有纯粹想在自己电脑上装个数据库练手的都适用。我尽量把每一步都讲透不光是告诉你点哪里还会解释为什么这么选、不这么选会有什么后果。1. 安装前的准备与版本选择1.1 哪个版本适合你SQL Server 2019的版本划分其实很清晰主要是四类Enterprise企业版、Standard标准版、Developer开发者版、Express免费版。大多数人看到这个列表就懵了不知道选哪个。我的建议非常直接自己学习、本地开发、写作业一律选Developer版公司正式生产环境买Standard或Enterprise临时跑个小工具Express凑合也行。Developer版最香的地方在于功能完整度几乎和企业版一样——包括Always On可用性组、内存中OLTP这些高级功能都有而且完全免费只要不拿去当生产环境用就可以。微软这个政策其实是很聪明的等于让开发者在本地把功能都摸熟了到了生产环境买企业版也不至于陌生。我见过不少初学者去网上找企业版的心愿码其实就是评估密钥完全没有必要Developer版就能覆盖你90%以上的学习需求。Express版则是个简化版数据库大小限制在10GB而且没有SQL Server Agent服务——这意味着你没法用作业调度功能而这个功能在日常运维里很常用。它适合的场景是轻量级的嵌入式应用、教学演示或者只需要一个极简数据库的时候。1.2 硬件和系统环境要求SQL Server 2019对硬件的要求说实话不算苛刻但有几个底线要清楚。内存方面Developer版建议至少4GB8GB或以上会更舒服。我自己在一台8GB内存的笔记本上跑过SSMS加上SQL Server服务日常使用没什么压力。CPU双核起步四核更好。磁盘上完整安装大概需要6GB到10GB的空间别忘了SSMS是单独安装的还要额外占用1GB左右。系统方面Windows 10 1809以上版本、Windows 11都支持。Windows Server的话需要2016以上。需要注意的一点是SQL Server 2019不支持在Windows 7上安装了如果是老系统要么升级要么装2017版。另外如果你的机器是ARM架构比如M系列的Mac装的Windows ARM虚拟机建议直接用Azure SQL Edge或者装Docker版省得折腾兼容性问题。Mac用户呢常见方案是在Parallels或VMware Fusion里装Windows虚拟机然后正常装SQL Server也可以用Docker Desktop跑Linux容器版本的SQL Server 2019。后一种方式我在Mac上试过几分钟就能跑起来适合只要命令行操作、不依赖SSMS图形界面的场景。1.3 下载渠道和安装介质准备下载务必去Microsoft官网的SQL Server下载页面别去第三方站点下什么“精简版”“破解版”——这类渠道很容易被篡改植入恶意内容。微软官方的下载速度在国内也还算能接受安装包大概几百MB不算大。下载时有两个东西需要区分一个是SQL Server 2019本体安装介质另一个是SQL Server Management StudioSSMS。这两个是分开下载、分开安装的。我刚接触的时候以为装完SQL Server就自带图形管理工具结果打开开始菜单一看什么都没有才反应过来要单独装SSMS。SSMS现在已经迭代到18.x或19.x版本了微软官网同样可以免费下载。另外想提一句安装时可以选择“基本”安装类型它会用默认配置安装不需要设置一堆参数适合完全没接触过的新手。但我还是建议用“自定义”类型走一遍完整流程因为你能看到每一个选项是什么、为什么要这么设后面出了问题也知道去哪个配置项排查。2. 完整安装流程详解2.1 启动安装向导选择安装类型打开下载好的安装程序第一屏会让你选安装类型。这里通常有三个选项基本、自定义、下载媒体。“基本”就是一路默认安装适合赶时间的人“自定义”可以自己选择功能、实例名称、数据目录等建议选这个“下载媒体”只是把安装包下载到本地适合在无网络环境部署时提前准备好。选完类型后需要接受许可条款。这里出现了一个很多新手容易忽略的选项——“使用Microsoft Update检查更新”。勾选它的话装完SQL Server后Windows Update也会顺带检查SQL Server的补丁更新。我的建议是勾上省得以后手动打补丁。接下来是功能选择页面这块是整个安装中第一个不能随便跳过的页面。默认是全选所有功能但我建议按需选择。核心功能有三项数据库引擎服务必须选、SQL Server复制可选做读写分离、数据分发时才需要、Analysis Services和Reporting Services做BI报表才需要。如果只是普通使用勾选数据库引擎服务再配合SSMS就足够了。全功能安装意味着更多的服务、更大的内存占用、更多的开机自启进程不划算。2.2 实例配置默认实例还是命名实例实例这个概念很多数据库新手会困惑。简单说一台机器上可以装多个SQL Server它们相互独立区分方式就是实例名。默认实例的名字就是MSSQLSERVER访问时直接用机器名或localhost就能连上命名实例则像“机器名\实例名”这样需要加个斜杠后面跟实例名。如果你不确定未来会不会在一台机器上装第二个SQL Server实例建议直接用默认实例。因为默认实例的连接字符串最简洁各种工具比如Excel、Power BI这类Office工具连接数据库时对默认实例的识别也更友好。命名实例则适合一台服务器承载多套环境比如测试环境和预发布环境分开的部署场景。我自己的选择是默认实例因为开发机器上基本不会装第二个实例。安装向导里默认选中“默认实例”保持默认即可。2.3 服务账号与启动类型设置这个地方很多人直接跳过但其实对你后面使用体验影响很大。SQL Server相关的服务包括数据库引擎、SQL Server代理、SQL Server浏览器等。每个服务都要有一个Windows账号来运行默认使用的是NT Service\MSSQLSERVER之类的虚拟账号。这个默认配置基本够用不建议去改成普通用户账号——改不好反而会导致服务启动失败。唯一值得留意的是“启动类型”数据库引擎肯定是“自动”但SQL Server Agent默认是“手动”。如果你以后要用作业调度功能建议把SQL Server Agent也改成“自动”或者需要时手动启动。SQL Server Browser服务建议保持“手动”或“禁用”只有使用命名实例并且需要通过网络发现实例时才需要打开。2.4 混合模式认证与sa账号设置身份验证模式是我反复强调的一个页面。SQL Server有两种认证方式Windows身份验证模式、混合模式SQL Server身份验证 Windows身份验证。Windows身份验证模式更安全直接用当前登录Windows的账号连接不需要再输入数据库账号密码。但它有个问题如果你的程序要从另一台机器连接这个数据库或者你的Java/Python代码里不方便传Windows凭据那么只能用混合模式。所以我一般建议选择混合模式并且设置saSystem Administrator系统管理员账号的密码。sa是SQL Server内置的最高权限账号密码一定要设置得足够复杂。微软的策略会强制你设置强密码长度至少8位包含大小写字母、数字和特殊字符中的三类。有些教程会告诉你可以把密码设简单千万别这么做——一旦数据库暴露在公网上弱口令的sa账号几分钟内就会被扫描爆破。设置完sa密码后下方有个“指定SQL Server管理员”选项这里需要添加当前Windows用户为数据库管理员。向导会默认把当前登录系统的用户添加进去确认一下就好。2.5 数据目录与TempDB配置数据目录界面主要设置系统数据库、用户数据库、日志文件的存放路径。默认在C盘的Program Files\Microsoft SQL Server\目录下。如果你C盘空间紧张强烈建议把数据文件路径改到其他盘。尤其是日志文件运行一段时间后会膨胀得很快。我在首次安装时没改结果用了三个月后C盘直接满了排查了半天才发现是数据库日志占了几十个GB。TempDB是SQL Server的临时数据库用于存放排序、临时表、哈希连接等操作产生的中间数据。高并发环境下TempDB的IO性能对整个数据库性能影响巨大。如果机器有多块物理硬盘把TempDB单独放到一块性能最好的盘上是一个性价比很高的优化。在安装向导里可以设置TempDB的数据文件和日志文件路径以及文件个数和初始大小。默认个数和大小其实够了不建议新手乱调除非你在生产环境有明确的性能监控数据支撑。2.6 安装完成后的自动配置流程到这个阶段向导会显示就绪检查的结果。如果某个检查项出现警告不要忽略。最常见的是防火墙警告——安装向导检测到Windows防火墙处于开启状态提示你需要放行SQL Server的通信端口默认1433。装完以后去防火墙设置里把规则加上就行不然从别的机器连不上。所有检查通过后点击安装等进度条走完。快的两三分钟慢的十几分钟取决于机器性能。看到“安装成功”界面时先别急着关记录一下功能列表里出现的安装目录和实例信息后面排查问题时可能会用到。3. 安装后的验证与基础配置3.1 验证服务是否正常运行安装完成后的第一件事不是急着打开SSMS连接而是确认服务状态。按WinR输入services.msc回车打开Windows服务管理器找到“SQL Server (MSSQLSERVER)”这一项确认状态是“正在运行”启动类型是“自动”。如果服务没启动最常见的两个原因是账号密码配置错误导致无法启动、安装过程中选择了Windows身份验证但当前用户没有被添加为管理员。右键点击服务选择“启动”如果报错去Windows事件查看器eventvwr.msc里的“Windows日志-应用程序”中查看具体的错误日志根据错误码去排查。还有个细节安装后默认情况下sa账号是禁用状态即使你在安装时设置了密码这是安全基线策略。你要先用Windows身份验证连上去再把sa账号启用。3.2 安装SSMS并完成首次连接SSMSSQL Server Management Studio就是SQL Server的图形化管理工具类似于MySQL的Workbench或者MongoDB的Compass。从微软官网下载SSMS安装包安装过程和普通软件一样一路下一步即可大概需要一两分钟。首次打开SSMS会弹出连接对话框。服务器类型默认“数据库引擎”服务器名称填“localhost”或一个点“.”都行都代表本机默认实例。身份验证方式选“Windows身份验证”因为你安装时已经添加了当前Windows用户为管理员。点击“连接”左边对象资源管理器就会出现数据库、安全性、服务器对象等层级结构到这一步说明安装成功了。如果连接失败先检查服务是否启动再检查防火墙。本地连接一般不会触发防火墙问题但如果是从别的机器连接多数是防火墙拦住了1433端口。命令行里用telnet测试一下端口是否通telnet 目标IP 1433如果不通说明防火墙或网络层面有问题。3.3 启用sa账号和设置密码用Windows身份验证连上之后展开“安全性”节点再展开“登录名”找到sa账号。右键sa选择“属性”在“常规”页签里重新设置一个密码然后在“状态”页签里把“是否允许连接到数据库引擎”设为“授予”“登录”设为“启用”。确定后sa账号就可以用于SQL Server身份验证登录了。注意启用sa账号之后SSMS下次连接时就可以选择“SQL Server身份验证”输入sa和密码来登录。对于用Java Spring Boot、Python pyodbc连接数据库的程序来说这一步几乎是必须的因为应用程序一般不会用Windows账号去连数据库。3.4 配置远程连接与防火墙放行如果数据库是装在服务器上你要从自己的电脑连过去光启用sa还不够还需要做两件事第一启用SQL Server的网络协议。打开“SQL Server配置管理器”在开始菜单或SQL Server安装目录中可以找到展开“SQL Server网络配置”点击实例名对应的节点右侧出现“Shared Memory”、“Named Pipes”、“TCP/IP”三个协议。默认情况下TCP/IP可能是禁用状态右键它选择“启用”然后重启SQL Server服务生效。第二在Windows防火墙中添加入站规则放行TCP 1433端口或者执行控制面板 - Windows防火墙 - 高级设置 - 入站规则 - 新建规则 - 端口 - TCP - 特定本地端口填1433 - 允许连接。这两步做完远程机器就能用SSMS通过“IP,1433”的方式连接了。4. 核心SQL操作入门建库、建表、增删改查4.1 用SSMS图形界面新建数据库SSMS里新建数据库非常简单右键“数据库”节点选择“新建数据库”填一个数据库名称比如SchoolDB然后确定。这里要注意的是“数据库文件”区域默认会生成一个.mdf主数据文件和一个.ldf日志文件右侧“初始大小”可以设置默认8MB和8MB对学习足够。文件增长方式选择“按百分比”默认10%或“按MB”比如每次增长64MB如果不想让文件无限膨胀可以在“自动增长/最大大小”里设置限制。高级选项里有“数据页校验”、“自动收缩”等设置新手保持默认即可。“选项”里的“恢复模式”默认是“完整”如果只是学习和开发用可以改成“简单”。区别在于“完整”模式下日志会完整记录支持时间点还原但日志文件会一直增长“简单”模式下日志会自动截断文件体积可控但不支持某些级别的恢复。生产环境必须用“完整”开发环境用“简单”省心得多。4.2 T-SQL语句创建数据库和表图形界面操作虽然直观但做开发的基本还是以T-SQL语句为主因为要写到脚本、提交到版本控制里。下面这个就是最基础的建库语句CREATE DATABASE SchoolDB; GOGO是SQL Server Management Studio中批处理语句的结束标记表示把前面的语句作为一个批次发送给服务器执行。创建表的核心语法如下USE SchoolDB; GO CREATE TABLE Students ( StudentID INT IDENTITY(1,1) PRIMARY KEY, StudentName NVARCHAR(50) NOT NULL, Gender CHAR(1) CHECK (Gender IN (M, F)), Birthday DATE NULL, EnrollmentDate DATETIME DEFAULT GETDATE() ); GO这里几个点值得解释一下。IDENTITY(1,1)是自增列从1开始每次加1通常用来做主键不需要手动赋值。NVARCHAR是Unicode字符串类型能存中文、日文等多字节字符开发中处理中文名、地址等字段时一定要用NVARCHAR而不是VARCHAR否则存储中文可能出现乱码。CHECK约束限制Gender列只能填M或F这是在数据库层面做的合法性校验。DEFAULT GETDATE()让EnrollmentDate在插入数据时默认取当前时间。4.3 插入、查询、更新、删除数据示例有了表之后最常用的就是增删改查。插入语句需要注意自增列不能手动指定值但其他列要和表定义对应。下面脚本展示了四条数据INSERT INTO Students (StudentName, Gender, Birthday, EnrollmentDate) VALUES (张明, M, 2000-05-21, 2023-09-01), (李娜, F, 2001-02-14, 2023-09-01), (王强, M, 2000-11-03, 2023-09-02), (赵敏, F, 2002-07-19, 2023-09-02); GO查询的数据是理解SQL的核心。下面几条语句覆盖了最常见的查询方式-- 查询全部列 SELECT * FROM Students; -- 按条件查询使用WHERE过滤 SELECT StudentID, StudentName, Gender FROM Students WHERE Gender F; -- 排序 SELECT StudentID, StudentName, EnrollmentDate FROM Students ORDER BY EnrollmentDate DESC; -- 分组统计 SELECT Gender, COUNT(*) AS Count FROM Students GROUP BY Gender;WHERE子句相当于一行行筛选ORDER BY是排序GROUP BY是分组聚合。理解这三个动作SQL基本就入门了一半。更新和删除语句必须搭配WHERE使用否则会更新或删除整张表的数据。这是初学者最常犯的错误我的建议是执行UPDATE或DELETE前先用相同的WHERE条件跑一遍SELECT确认范围正确后再执行。-- 更新修改指定学生的性别 UPDATE Students SET Gender F WHERE StudentID 4; -- 删除删除指定学生记录 DELETE FROM Students WHERE StudentID 4;4.4 备份与恢复的两种常用方式数据库备份是基本功。SSMS里右键数据库 - 任务 - 备份选择备份类型为“完整”目标路径默认是SQL Server的备份目录也可以手动指定为D:\backup\SchoolDB.bak。备份完成后会生成一个.bak文件这是物理备份文件移动、复制到其他机器都能用。恢复时右键“数据库”节点 - 还原数据库 - 设备选择.bak文件程序会识别里面的数据库文件布局和名称。如果是从另一台机器恢复过来的库要注意“选项”页签里的“还原为”路径确认目标文件路径存在否则还原会报错。一个常见错误是目标数据库正在被使用还原时把“关闭现有连接”勾上或者在还原前把目标数据库的“限制访问”设置为“单用户”。命令行方式也有最简单的是用sqlcmd执行RESTORE DATABASE语句适合写脚本自动化的场景。5. 常见问题与排查技巧实录5.1 安装失败性能计数器注册表项不一致在部分Windows 10版本上安装SQL Server 2019时安装向导可能会报“性能计数器注册表项不一致”的错误。这个我当时也遇到过原因一般是系统里的性能计数器相关注册表损坏或格式不对。解决办法是到系统目录下用lodctr /r命令重置性能计数器注册表项再重新运行安装程序。步骤是以管理员身份打开命令提示符执行lodctr /r等待执行完成重启电脑重新安装。如果还不行可以检查一下HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib下是否有Last Counter和Last Help两个键值没有或异常的话手动导入微软提供的默认配置但这一步比较复杂正常机器执行lodctr /r基本能解决。5.2 安装时提示“需要安装.NET 3.5”SQL Server 2019安装向导有时要求系统启用.NET Framework 3.5功能如果你的Windows系统默认没有启用安装程序会弹出提示或直接报错。解决方法是控制面板 - 程序 - 启用或关闭Windows功能 - 勾选“.NET Framework 3.5包括.NET 2.0和3.0”然后点击确定系统会联网下载所需组件并启用。如果系统无法联网可能需要使用系统镜像文件离线启用或者在安装命令中加入参数跳过这一项但正常情况下在线启用即可。5.3 连接本地实例失败错误18456错误18456是SQL Server最常见的连接错误对应的信息是“用户登录失败”。细分为几种情况。如果你用的是Windows身份验证但当前Windows账号不是SQL Server管理员就会报18456如果你用的是sa登录但密码错误或者账号被禁用也会报18456。排查思路先用Windows身份验证连接试试如果能连上说明服务正常问题在账号密码上如果连不上检查服务是否启动、网络协议是否启用。账号方面检查sa的“状态”里“登录”是否已启用密码是否正确是否不小心被锁定了。日志里错误状态码不同原因也不同比如状态码为2表示密码无效状态码为8表示账号被禁用这些在SQL Server错误日志中都会记录。5.4 查询性能慢忘记创建索引很多初学者第一次写SQL遇到性能问题第一反应是调SQL语句或者怀疑服务器配置不行。但其实大多数场景下查询慢的原因只有一个没有索引。上面建表时只有主键StudentID自动建了聚集索引如果经常按EnrollmentDate筛选或排序没有索引就会全表扫描数据量一大性能差别就非常明显。创建索引的语句很简单CREATE INDEX IX_Students_EnrollmentDate ON Students(EnrollmentDate);创建了索引之后再次执行按EnrollmentDate查询或排序的SQL观察实际执行计划会发现从Table Scan变成了Index Seek逻辑读取次数也会大幅下降。不过要提醒一句索引不是越多越好每张表上加了索引插入、更新、删除时就要额外维护索引结构所以只在频繁查询的列上建索引。5.5 日志文件无限膨胀的处理使用完整恢复模式的数据库如果长期不做日志备份事务日志会不断增长最终把磁盘占满。针对这个问题的应急处理办法是将恢复模式切换为“简单”然后执行DBCC SHRINKFILE收缩日志文件。但要注意这只适合不需要时间点恢复的库。生产库的正确做法是定期做事务日志备份备份后日志文件会自动截断。具体的收缩语句如下USE SchoolDB; GO ALTER DATABASE SchoolDB SET RECOVERY SIMPLE; GO DBCC SHRINKFILE (SchoolDB_log, 100); GO ALTER DATABASE SchoolDB SET RECOVERY FULL; GO把恢复模式切回FULL后一定要记得重建完整备份作为基线否则日志链断了会影响后续的日志备份与还原。5.6 忘记sa密码怎么办如果忘了sa密码同时又没有其他可用的管理员账号那就比较被动了。解决办法是在Windows服务管理器里把SQL Server服务启动参数加上-m单用户模式然后以管理员身份用Windows身份验证连接SQL Server此时系统会允许你以sysadmin身份登录。登录成功后用ALTER LOGIN语句重置sa密码然后去掉-m参数重启服务恢复正常。单用户模式连接时候要注意SSMS本身也会占用一个连接要先关掉其他连接否则SSMS连不上去。我实际操作时的办法是先停掉SQL Server服务在服务属性启动参数里加-m启动服务马上打开SSMSWindows身份验证连接改密码退出SSMS去掉-m参数重启服务。6. 一点实操心得总结开头说过SQL Server 2019的安装是微软系软件里比较省心的真正考验人的往往是安装后的配置和日常使用习惯。我自己装了这么多次之后有几点感受特别深。第一不要在安装时图省事一直点“下一步”默认设置。数据目录、身份验证模式、服务启动类型这三项务必手动确认不然以后改起来比安装时多花好几倍时间。第二sa账号和防火墙规则要提前规划好涉及服务器部署一定要把1433端口放行、sa密码强度拉满安全方面不能心存侥幸。第三数据库的学习一定要把SSMS图形界面和T-SQL语句两条线并行图形界面帮你建立直观认识语句才是真正能自动化和上生产的东西。SQL Server 2019的技术栈里还有复制、Always On、集成服务、分析服务等一大片功能这篇讲的只是最基础的地基。如果你能把建库建表、增删改查、备份恢复这三板斧练熟练透日常开发中用到的百分之八九十的场景都已经覆盖了。至于更高阶的内容那是下一篇的事了。