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

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 完全不同概念这里的自增identity11指的是起始从一开始每次的增量为一而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-FETCHAI写代码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-SQLSQL Server 的存储过程、触发器语法与 MySQL 差异较大总结SQL Server 与 MySQL 在核心 SQL 语法上相似度 80%差异主要在数据类型N 前缀、分页语法和工具链期望在之后也能熟练掌握SQL Server数据库

相关文章:

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

作为一名在大学项目 中经常使用MySQL 数据库的开发者,最近因项目需要开始学习 SQL Server。本文记录核心差异点和学习要点,方便有相同背景的同学快速上手以及我的事后回顾。一、基础概念对比 特性 MySQL SQL Server 所属公司 Oracle&#xff08…...

答题卡检测

答题卡识别评分代码完整讲解1. 答题卡处理流程图1) 读取答题卡图像并进行灰度化、模糊处理和边缘检测;2) 定位答题卡区域并进行透视变换;3) 通过阈值处理和轮廓分析检测填涂的选项泡泡;4) 将检测结果与标准答案对比计算得分。系统支持自定义参…...

程序员如何利用自然语言处理技术

程序员如何利用自然语言处理技术关键词:程序员、自然语言处理、技术应用、算法原理、实战案例摘要:本文旨在全面探讨程序员如何利用自然语言处理(NLP)技术。从自然语言处理的背景知识入手,详细阐述其核心概念、算法原理…...

简单的c语言分析 汇编代码

1、STR是ARM汇编中的内存访问指令:表示字数据写入,用于将一个32位的字数据写入到指令中指定的内存单元。 比如STR R0, [R1, #0x100]; 表示将R0中的字数据保存到内存单元(R10x100)中。2、 BL 指令BL 指令的格式为: BL{条…...

ALS(Approximate Logic Synthesis) 综述| Approximate Logic Synthesis: A Survey

记一下ALS的综述笔记。Introduction 讲近似电路计算的两种分类,大致介绍了怎么对误差建模。Method for error estimation 讲如何计算近似电路和精确电路的误差。包括: A. error matrix hamming distance (max & average)error rateapproximate effic…...

keil+Arm Visual Hardware(AVH)入门

1.准备 下载keil5,最新版本5.37(早期版本没有AVH),激活professional版本,plus和Essential版本不行 2.安装好keil后,建立VHT工程,此处以arm cortex-M4为例,按照下图选择设备3.配置标准接口,下面以…...

Google Earth Engine(GEE)——矢量数据集合和影像集合的连接join,给矢量集合添加到两景影像作为矢量集合的属性

本次教程主要是加载一个矢量集合,然后通过设定指定的时间条件和地理条件,和指定的时间窗口进行筛选应用于Landsat8 影像,最后将筛选出的影像加载到矢量集合中。 矢量数据集合: Feature Index Dy (Long) Hr (Long) Location N (String) Mo (Long) Year (Long) system:index…...

全球台锯:家具家装与建筑工程刚需驱动下的稳增扩容,2026-2032年CAGR3.8%,2032年规模9.6亿美元

在制造业与木工行业的蓬勃发展浪潮中,台锯作为核心工具,其市场表现备受瞩目。QYResearch调研显示,2025年全球台锯市场规模大约为7.41亿美元,预计2032年将达到9.6亿美元,2026-2032期间年复合增长率(CAGR&…...

解决报错:ORA-12541:TNS:无监听程序

1.重新配置监听 找到监听程序配置,右键已管理员身份运行 选择第二个:重新配置 这个一般没什么好选的 默认选定的协议TCP,继续下一步 默认的否 继续下一步,完成监听重新配置 之后进行测试看能否连上 2.本地Net服务名配置 …...

QT(二):Qt相关控件的使用和设置,Qt对话框的使用,画图事件的创建和设置,线程和锁的创建利用,网络编程,TCP和UDP客户端及服务器的创建,SQLITE数据库,QTableWidget控件的使用

一、相关控件及操作配置1、QPushButton & QtoolButton(按钮)setText(QString) ---- 设置按钮上的内容setFixedSize(int w, int h) --- 设置固定大小setFixedHeight(int) --- 设置固定高度setFixedwidth(int) --- 设置固定宽度setMaximumSize(…...

AF350标记α-银环蛇d素,AF350-a-Bungarotoxin核心功能与应用场景

α-Bungarotoxin AF350,AF350标记α-银环蛇d素,AF350-a-Bungarotoxin,AF350-α-BTX,银环蛇d荧光标记一、试剂本质与结构解析α-Bungarotoxin, AF350(以下简称“AF350-α-BTX”)是一种由台湾银环蛇d液中提取…...

10分钟上手SIMP:从安装到基础配置的快速入门指南

10分钟上手SIMP:从安装到基础配置的快速入门指南 【免费下载链接】SIMP A system automation and configuration management stack targeted toward operational flexibility and policy compliance. 项目地址: https://gitcode.com/gh_mirrors/si/SIMP SIMP…...

基于深度学习的本科毕业设计

1 适用对象 本科生关于目标检测、语义分割的毕业设计。 2 深度学习基础知识 2.1 深度学习理论 (1) 吴恩达深度学习视频(转载)https://www.bilibili.com/video/BV1Gm421u73z/?spm_id_from333.337.search-card.all.click&v…...

【亲测免费】 探索未来打印体验:ESP3D 智能3D打印机固件

探索未来打印体验:ESP3D 智能3D打印机固件 【免费下载链接】ESP3D FW for ESP8266/ESP8285/ESP32 used with 3D printer 项目地址: https://gitcode.com/gh_mirrors/es/ESP3D 项目介绍 ESP3D是一个创新的开源固件,专为ESP8266和ESP32芯片设计&am…...

探索Bunny项目:一个智能数据处理与分析的利器

探索Bunny项目:一个智能数据处理与分析的利器 【免费下载链接】Bunny A family of lightweight multimodal models. 项目地址: https://gitcode.com/gh_mirrors/bunny/Bunny 项目简介 是一款由BAAI-DCAI团队开发的开源项目,它旨在提供高效、灵活…...

IT从业人员能做哪些兼职-总有一款适合你(非常详细)零基础入门到精通,收藏这一篇就够了

作为IT从业者,在闲暇时间可以尝试以下一些兼职: 1. 程序员兼职:在各大IT招聘网站上,有很多针对IT从业者的兼职职位,可以根据自己的技能和时间情况选择相应的岗位,如开发小程序、网站等。 2. IT培训师&…...

TextAttack API详解:打造属于你的NLP对抗性训练框架

TextAttack API详解:打造属于你的NLP对抗性训练框架 【免费下载链接】TextAttack TextAttack 🐙 is a Python framework for adversarial attacks, data augmentation, and model training in NLP https://textattack.readthedocs.io/en/master/ 项目地…...

[特殊字符]现代机器人学课程:理论与实践的完美融合[特殊字符]

🤖现代机器人学课程:理论与实践的完美融合🚀 【免费下载链接】modern-robotics-course This repository is all the lessons for Modern Robotics Course. 项目地址: https://gitcode.com/gh_mirrors/mo/modern-robotics-course 在科…...

带你解开“人寿类商业保险”的真面目

本内容较浅显易懂的简述了保险险种的分类、查询、配置,以及保险中的掩藏项。主要以个人所购买的两款人寿类商业保险为例说明。持续更新,原创不易! 目录: 一、保险险种的分类 1、意外险 2、寿险 3、重疾险 4、医疗险 二、保…...

【亲测免费】 SCUT_thesis 开源项目使用教程

SCUT_thesis 开源项目使用教程 【免费下载链接】SCUT_thesis 华南理工大学硕博士学位论文LaTeX模板。Latex templates for the thesis of South China University of Technology 项目地址: https://gitcode.com/gh_mirrors/sc/SCUT_thesis 1. 项目的目录结构及介绍 SCU…...

win11+vs2019 解决qt界面中文乱码问题和linguist不识别或乱码问题

1.修改文档编码联机搜索下载插件。安装这个插件便于查看及修改当前文档编码。将你含有 tr("中文") 的文档编码全部换成UTF-8(BOM)(解决linguist不识别或乱码问题)。界面还是乱码的话,把编译选项也加上。项目 → 属性 → C/C → 命令…...

AperiSolve 开源项目教程

AperiSolve 开源项目教程 【免费下载链接】AperiSolve Steganalysis web platform 项目地址: https://gitcode.com/gh_mirrors/ap/AperiSolve 1. 项目的目录结构及介绍 AperiSolve 项目的目录结构如下: AperiSolve/ ├── app/ │ ├── __init__.py │…...

Deepagents中间件详解:如何自定义和扩展代理能力

Deepagents中间件详解:如何自定义和扩展代理能力 【免费下载链接】deepagents Deepagents is an agent harness built on langchain and langgraph. Deep agents are equipped with a planning tool, a filesystem backend, and the ability to spawn subagents - m…...

计算无人机巡逻覆盖地块数Java题解

问题描述 一块地用一个从 0 开始索引的二维二进制矩阵 block 表示,其中 0 表示空闲地块,1 表示放有障碍物的地块。在每个测试用例中,地的左上角永远是空闲的。一架无人机面向右侧,从左上角开始巡逻。无人机将一直前进,直到抵达的边界或遇到障碍物地块时,无人机将会顺时针…...

Tiny Wings 项目推荐

Tiny Wings 项目推荐 【免费下载链接】tiny-wings Remake of the popular iPhone game. 项目地址: https://gitcode.com/gh_mirrors/ti/tiny-wings 1、项目的基础介绍和主要的编程语言 Tiny Wings 是一个开源项目,旨在重现流行的 iPhone 游戏 Tiny Wings 的…...

java毕业设计下载(全套源码+配套论文)——基于java+JSP+J2EE的户籍管理系统设计与实现(毕业论文+程序源码)

基于javaJSPJ2EE的户籍管理系统设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于javaJSPJ2EE的户籍管理系统设计与实现,更多精选毕业设计项目实例见文末哦。 文章目录: 基于javaJSPJ2EE的户籍管理系统设计与…...

java毕业设计下载(全套源码+配套论文)——基于java+JSP+MyEclipse的网上订餐系统设计与实现(毕业论文+程序源码)

基于javaJSPMyEclipse的网上订餐系统设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于javaJSPMyEclipse的网上订餐系统设计与实现,更多精选毕业设计项目实例见文末哦。 文章目录: 基于javaJSPMyEclipse的网上…...

材料新人成长地图:福尔蒂应用工程师首年实战——从GMP取样到DOE设计

刚入行那会儿,我常被几个词绕得晕头转向:GMP取样是什么流程?DOE设计到底怎么搭实验?为什么客户一句“这个色差不稳定”,我就得翻三遍配方表、查两次干燥参数、再跑一趟车间复核喂料精度?直到加入青岛福尔蒂…...

Swagger2 自定义排序

分享一下SpringSwagger2在线文档自定义排序的代码。 这里参考swagger2 接口排序_swagger接口排序-CSDN博客提供的思路&#xff0c;并在此基础上做了优化。 1、引用pom信息 <!--swagger依赖(pojo注解)--><dependency><groupId>io.swagger</groupId>&l…...

C语言简易计算器程序的实现与优化

目录 一、基础版本&#xff1a;简单直接的功能实现 完整代码 版本分析 优点 缺点 二、进阶版本&#xff1a;函数指针数组优化 完整代码 版本分析 核心优化点 优点 三、改进版本&#xff1a;功能解耦与模块化 完整代码 版本分析 核心设计思想&#xff1a;模块化解…...