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数据库
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2420014.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!