当前位置: 首页 > news >正文

SQL Server 学习笔记:从 MySQL 到 SQL Server

作为一名在大学项目 中经常使用MySQL 数据库的开发者,最近因项目需要开始学习 SQL Server。本文记录核心差异点和学习要点,方便有相同背景的同学快速上手以及我的事后回顾。

一、基础概念对比
特性 MySQL SQL Server
所属公司 Oracle(开源/商业) Microsoft(商业)
默认端口 3306 1433
主键自增 auto_increment identity(起始值, 增量)
字符串类型 varchar/char nvarchar/nchar(支持Unicode)
分页语法 limit offset, count OFFSET-FETCH / TOP(常用)
空值处理 ifnull() isnull()
当前时间 now() getdate()
在一开始安装完SQL Server迫不及待地登陆验证创建第一个表的时候,我还是带着MySQL的思维去开始,use -> create database -> create table

但是,use完之后,我试图使用create table if not exists esa时候,他一直不通过,直到查阅完资料之后才发现,SQL Server的非空创建代码是if db_id('esa') is null create table esa;

就连我通常使用的Auto_Increment自增方式也被改变为了Identity用法

之后我痛定思痛,决定先去查阅相关资料,再来着手第一步,不过你别说,在查阅完资料之后发现了一些SQL Server的亮点是MySQL所没有的

二、数据类型 差异(重点)
1. 字符串类型:N 前缀是灵魂

-- MySQL create table user ( name varchar(50), -- 非Unicode,中文可能乱码 phone char(11) ); -- SQL Server create table user ( name nvarchar(50), -- Unicode,支持中文/日文/emoji phone nchar(11) );


在我测试的中,SQL里的varchar变长字符串还是可以正常存放一些中文字符的(案例较少哈~)

既然官方文档说字符类型前加上N会更好,那么何乐而不为呢?

2. 数值与日期
MySQL SQL Server 说明
INT AUTO_INCREMENT INT IDENTITY(1,1) 自增主键
DECIMAL(10,2) DECIMAL(10,2) / MONEY 金额可用 MONEY 类型
DATETIME DATETIME / DATETIME2 DATETIME2 精度更高
TIMESTAMP DATETIME / ROWVERSION 完全不同概念!
这里的自增identity(1,1)指的是起始从一开始,每次的增量为一;

而decimal这个关键字更是常用,CSharp里面就是老朋友了,但是这里略有不同,这里的10指的是数字的总长度,2指的是小数点后有两位,所以这里的组成是8位整数位,2位小数位

三、SQL 语法差异

1. 分页查询:TOP vs OFFSET-FETCH -- MySQL 方式(简洁) SELECT * FROM emp LIMIT 10 OFFSET 20; --SQL 老版方式,个人感觉很复杂 SELECT * FROM emp ORDER BY sal OFFSET 20 ROWS -- 跳过前20条 FETCH NEXT 10 ROWS ONLY; -- 取10条 -- SQL Server 传统方式(兼容旧版) SELECT TOP 10 * FROM emp; -- 带排序的 TOP(注意:没有ORDER BY时结果不确定) SELECT TOP 10 * FROM emp ORDER BY sal DESC; -- TOP WITH TIES(并列排名时返回更多) SELECT TOP 10 WITH TIES * FROM emp ORDER BY sal DESC;

这里我在找了一些题目之后,发现还是TOP语法用的更多一点,但是感觉老版方式可能会更多用在分页文件上,通过点击分页键来呈现不同页面的数据

2. 空值处理

-- MySQL SELECT IFNULL(comm, 0) + sal AS total FROM emp; -- SQL Server SELECT ISNULL(comm, 0) + sal AS total FROM emp; -- 或者使用 COALESCE(两者都支持) SELECT COALESCE(comm, 0) + sal AS total FROM emp;



这里就是一个很典型的案例了,推荐用isnull() 括号里面两个参数,如果comm被判定了是null的值,那么我们会把0赋值给他

3. 字符串连接

-- MySQL SELECT CONCAT('Hello', ' ', 'World'); -- SQL Server 2012+ SELECT CONCAT('Hello', ' ', 'World'); -- 或者使用 + 号(注意:NULL + 字符串 = NULL) SELECT 'Hello' + ' ' + 'World';


运行
四、核心查询(DQL)对比
完整查询结构

-- MySQL 和 SQL Server 结构相似,但分页不同 SELECT TOP 10 * -- SQL Server 限定结果 FROM emp WHERE sal > 2000 GROUP BY deptno HAVING SUM(sal) > 9000 ORDER BY sal DESC;



主要查询方式还是和MySQL时期的用法相似的,对于我这种初学者来说还是很亲切的

执行顺序(两者相同)
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → TOP/OFFSET-FETCH
AI写代码
sql
五、约束与完整性
1. 主键自增

-- MySQL CREATE TABLE stu ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) ); -- SQL Server CREATE TABLE stu ( id INT PRIMARY KEY IDENTITY(1,1), -- 从1开始,每次+1 name NVARCHAR(50) ); -- 插入时都不需要给自增列赋值 INSERT INTO stu(name) VALUES('张三');



2. 外键约束

语法几乎一致,但 SQL Server 图形化界面更强大: -- 两者语法相同 ALTER TABLE emp ADD CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id) REFERENCES dept(id);



SQL Server 特色:在 SSMS 中可视化查看表关系图(Database Diagrams)。

六、实用工具对比
表格

功能 MySQL SQL Server
图形客户端 Navicat / DataGrip / Workbench SQL Server Management Studio (SSMS)
命令行 mysql -u root -p sqlcmd -S . -U sa
服务管理 systemctl start mysqld net start mssqlserver
备份还原 mysqldump SSMS 图形界面 / BACKUP DATABASE
数据迁移 手动导出导入 导入导出向导(极好用)

SQL Server 服务管理 # 启动服务 net start mssqlserver # 停止服务 net stop mssqlserver # 连接数据库(命令行) sqlcmd -S 127.0.0.1 -U sa -P 123456


七、让我惊喜的 SQL Server 特性

1. TOP 的灵活用法 -- 更新前5条 UPDATE TOP (5) emp SET sal = sal * 1.1; -- 删除前5条 DELETE TOP (5) FROM emp;


直接将emp里面的sal前五条数据放大1.1倍

2. 窗口函数(两者都支持,但 SQL Server 更早支持)
-- 排名(SQL Server 2005+ 就支持)

SELECT name, sal, RANK() OVER (ORDER BY sal DESC) as rank, ROW_NUMBER() OVER (ORDER BY sal DESC) as row_num FROM emp;


3. 临时数据库
SQL Server 安装后自带4个系统数据库:

master:核心系统表

model:模板数据库

msdb:代理调度

tempdb:临时表(重启后清空)

八、踩坑记录
坑点 说明
字符串必须用 N 前缀 INSERT INTO t VALUES(N'中文'),否则可能乱码
IDENTITY 插入 需要 SET IDENTITY_INSERT ON 才能手动插入自增ID
分页必须带 ORDER BY OFFSET-FETCH 强制要求排序,否则报错
事务默认自动提交 与 MySQL 相同,但语法用 BEGIN TRAN / COMMIT
删除数据库需脱机 右键数据库 → 任务 → 脱机,才能删除文件
九、快速上手建议
先装 SSMS:图形界面非常强大,比 Navicat 更适合 SQL Server

记住 N 前缀:所有字符串字段用 NVARCHAR,所有字符串字面量加 N'...'

分页用 OFFSET-FETCH:新写法更标准,且与 Oracle/PostgreSQL 兼容

善用导入导出向导:数据迁移比 MySQL 方便太多

学习 T-SQL:SQL Server 的存储过程、触发器语法与 MySQL 差异较大

总结:SQL Server 与 MySQL 在核心 SQL 语法上相似度 80%,差异主要在数据类型(N 前缀)、分页语法和工具链,期望在之后也能熟练掌握SQL Server数据库

http://www.jsqmd.com/news/491484/

相关文章:

  • 如何用NFC标签直接打开应用的某个功能?技术深度解析与商业落地
  • 开关接触不良?数据说了算!回路电阻测试仪应用与选购实战 - 品牌推荐大师
  • Git操作指南
  • 2026年五年一贯制专转本机构推荐及选择参考 - 品牌排行榜
  • 2026年四川儿童运动能力与感统训练机构深度评测:专业服务引领儿童全脑发展新趋势 - 深度智识库
  • 迦娃餐馆点餐系统的设计与实现小程序
  • 别再瞎打日志了!这才是 Java 后端日志的正确打开方式
  • 无密码管理:特权访问管理(PAM)的核心应用场景
  • 2026年学培课堂好吗?真实体验与选择指南 - 品牌排行榜
  • 为什么同一篇论文不同平台检测AI率差这么多?原理解析
  • 扫雷游戏实现来了
  • LeetCode HOT100 - 相交链表
  • ADRC优于PID?真相揭秘
  • 2026年3月浮动球阀供应厂家技术实力分析,浮动球阀分析技术实力与市场典范解析 - 品牌推荐师
  • docker下载安装-镜像加速-镜像制作
  • Android Drawable,ColorMatrix
  • 手把手教你用coze搭建AI Agent(智能体)
  • Hi3519芯片开发过程笔记:四、Uboot环境变量nand_env.bin镜像生成方法(默认环境变量设置方法)
  • C语言链表练习
  • Innode引擎监控的开启的方法
  • C盘清理指南(三)——文件目录更改
  • 闲置大润发购物卡别浪费!超全回收实操指南,新手也能零踩坑 - 京回收小程序
  • mysql版本详解
  • P1248 加工生产调度 - Johnson 法则如何使用 - java版
  • 10分钟上手SIMP:从安装到基础配置的快速入门指南
  • 国产先进封装设计软件选型指南:2026对标Cadence SIP的国产工具推荐 - 品牌2026
  • 如何学习硬件设计——理论篇
  • 百联卡回收最新攻略:方法和流程详解 - 猎卡回收公众号
  • AF350标记α-银环蛇d素,AF350-a-Bungarotoxin核心功能与应用场景
  • 甩掉API硬编码包袱:2026桌面级办公智能体选型指南及实在Agent等主流工具横评