news 2026/7/9 4:37:29

SQL Server 和 MySQL 基础用法对比

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL Server 和 MySQL 基础用法对比

一、数据库连接

MySQL

mysql -uroot -p

切换数据库

USE test;

查看数据库

SHOW DATABASES;

查看当前数据库

SELECT DATABASE();

SQL Server

连接一般使用:

  • SSMS(SQL Server Management Studio)

  • Azure Data Studio

  • sqlcmd

切换数据库

USE test; GO

查看数据库

SELECT name FROM sys.databases;

查看当前数据库

SELECT DB_NAME();

二、创建数据库

MySQL

CREATE DATABASE test;

删除

DROP DATABASE test;

SQL Server

CREATE DATABASE test; GO

删除

DROP DATABASE test; GO

SQL Server 通常使用

GO

作为批处理结束符。

GO 不是 SQL 语句,而是客户端命令。


三、查看表

MySQL

查看所有表

SHOW TABLES;

查看建表语句

SHOW CREATE TABLE user;

查看字段

DESC user;

SQL Server

查看所有表

SELECT * FROM sys.tables;

或者

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES;

查看字段

sp_help user;

或者

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='user';

四、创建表

MySQL

CREATE TABLE user( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), age INT );

SQL Server

CREATE TABLE [user]( id INT PRIMARY KEY IDENTITY(1,1), name VARCHAR(50), age INT );

最大的区别:

MySQL

AUTO_INCREMENT

SQL Server

IDENTITY(1,1)

表示

起始值 = 1 步长 = 1

五、插入数据

两者基本一致

INSERT INTO user(name,age) VALUES('Tom',18);

批量插入

INSERT INTO user(name,age) VALUES ('Tom',18), ('Lucy',20), ('Jack',25);

六、查询

查询全部

两者一样

SELECT * FROM user;

条件查询

SELECT * FROM user WHERE age>20;

一样。


排序

SELECT * FROM user ORDER BY age DESC;

一样。


去重

SELECT DISTINCT age FROM user;

一样。


分组

SELECT age, COUNT(*) FROM user GROUP BY age;

一样。


七、分页

这是最大的区别之一。


MySQL

SELECT * FROM user LIMIT 10;

前10条。

分页

SELECT * FROM user LIMIT 20,10;

表示

跳过20条 取10条

SQL Server(2012+)

SELECT * FROM user ORDER BY id OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

必须有

ORDER BY

否则不能分页。


SQL Server 老版本(2008)

SELECT TOP 10 * FROM user;

前10条。


八、修改数据

一样

UPDATE user SET age=30 WHERE id=1;

九、删除数据

一样

DELETE FROM user WHERE id=1;

清空表

MySQL

TRUNCATE TABLE user;

SQL Server

TRUNCATE TABLE user;

也一样。


十、自增ID

MySQL

AUTO_INCREMENT

SQL Server

IDENTITY(1,1)

查看最后插入ID

MySQL

SELECT LAST_INSERT_ID();

SQL Server

SELECT SCOPE_IDENTITY();

十一、字符串拼接

MySQL

SELECT CONCAT(first_name,last_name);

SQL Server

SELECT first_name + last_name;

或者

SELECT CONCAT(first_name,last_name);

SQL Server 2012 后也支持 CONCAT。


十二、判断空值

MySQL

IFNULL(name,'未知')

SQL Server

ISNULL(name,'未知')

或者

COALESCE(name,'未知')

十三、条件判断

MySQL

IF(age>18,'成年','未成年')

SQL Server

没有 IF 函数。

使用

CASE WHEN age>18 THEN '成年' ELSE '未成年' END

实际上

SQL Server 更推荐 CASE。


十四、日期函数

当前时间

MySQL

NOW()

SQL Server

GETDATE()

今天

MySQL

CURDATE()

SQL Server

CAST(GETDATE() AS DATE)

增加一天

MySQL

DATE_ADD(NOW(),INTERVAL 1 DAY)

SQL Server

DATEADD(DAY,1,GETDATE())

日期差

MySQL

DATEDIFF(date1,date2)

SQL Server

DATEDIFF(DAY,date1,date2)

SQL Server 必须指定单位。


十五、字符串长度

MySQL

LENGTH(name)

字节数

字符数

CHAR_LENGTH(name)

SQL Server

LEN(name)

注意

SQL Server

LEN() 不会统计尾部空格

十六、修改字段

MySQL

ALTER TABLE user ADD phone VARCHAR(20);

SQL Server

一样

ALTER TABLE user ADD phone VARCHAR(20);

删除字段

ALTER TABLE user DROP COLUMN phone;

一样。


十七、事务

MySQL

START TRANSACTION; UPDATE account SET money=money-100 WHERE id=1; UPDATE account SET money=money+100 WHERE id=2; COMMIT;

回滚

ROLLBACK;

SQL Server

BEGIN TRANSACTION; UPDATE account SET money=money-100 WHERE id=1; UPDATE account SET money=money+100 WHERE id=2; COMMIT TRANSACTION;

回滚

ROLLBACK TRANSACTION;

十八、变量

MySQL

SET @name='Tom'; SELECT @name;

SQL Server

DECLARE @name VARCHAR(20); SET @name='Tom'; SELECT @name;

十九、注释

两者一致

单行

-- 注释

多行

/* 注释 */

二十、常见数据类型对比

类型MySQLSQL Server
整数INTINT
大整数BIGINTBIGINT
小整数SMALLINTSMALLINT
布尔BOOLEAN(实际为 TINYINT(1))BIT
浮点FLOAT、DOUBLEFLOAT、REAL
定点DECIMALDECIMAL、NUMERIC
字符串VARCHARVARCHAR、NVARCHAR
长文本TEXTVARCHAR(MAX)、NVARCHAR(MAX)
日期DATEDATE
日期时间DATETIME、TIMESTAMPDATETIME、DATETIME2
二进制BLOBVARBINARY(MAX)
JSONJSONNVARCHAR + JSON 函数(2016+)或 JSON 支持

二十一、常用语法差异速查

功能MySQLSQL Server
自增主键AUTO_INCREMENTIDENTITY(1,1)
查看前 N 条LIMIT 10TOP 10
分页LIMIT offset,countOFFSET ... FETCH
当前时间NOW()GETDATE()
空值处理IFNULL()ISNULL()
条件表达式IF()CASE WHEN
字符串拼接CONCAT()+CONCAT()
最后插入 IDLAST_INSERT_ID()SCOPE_IDENTITY()
开启事务START TRANSACTIONBEGIN TRANSACTION
批处理结束GO(客户端命令)

总结

对于熟悉 MySQL 的开发者来说,迁移到 SQL Server 时主要需要关注以下几个差异:

  • 自增列AUTO_INCREMENTIDENTITY(1,1)

  • 分页查询LIMITOFFSET ... FETCH(或旧版TOP

  • 内置函数:如NOW()GETDATE()IFNULL()ISNULL()IF()CASE

  • 变量声明:SQL Server 需要使用DECLARE显式声明变量。

  • 批处理分隔符GO是客户端批处理命令,不属于 SQL 标准,常见于 SSMS 和sqlcmd

整体而言,两者在 DDL(建表)、DML(增删改查)和事务控制上的核心思想基本一致,掌握这些语法映射后,大多数日常开发工作都可以快速适应。

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

【公共云三十问 之二】为什么公共云成为智能时代的“水电煤”?

AI驱动产业全域变革,智能经济以数据、算力、算法为核心要素,形成 “感知—理解—生成—执行 —反馈” 智能运行闭环,对弹性算力、快速迭代、全域合规、跨域协同、多场景灵活部署提出更高要求,传统分散、静态的基础设施&#xff0c…

作者头像 李华
网站建设 2026/7/9 4:36:49

【AI 杂谈】当互联网的大多数“用户“不再是人

当互联网不再属于人类 2026 年 6 月初,Cloudflare 的 Radar 仪表盘上,一条曲线悄无声息地穿过了 50% 的分界线。 那是 HTML 网页请求中机器流量的占比。到 6 月 3 日,这个数字到了 57.5%,人类流量剩下 42.5%(来源&…

作者头像 李华
网站建设 2026/7/9 4:34:48

IT资产管理自动盘点和运维巡检报告怎么自动化?——基于AI Agent与智能自动化的落地架构与选型指南

在企业数字化转型的深水区,IT基础设施的规模与复杂度正呈几何级数增长。传统的IT资产盘点与运维巡检长期依赖人工“人盯设备”与“手动填报”的被动响应模式。由于企业内部系统林立,资产台账、网络监控、工单系统之间存在严重的基础设施数据孤岛&#xf…

作者头像 李华
网站建设 2026/7/9 4:28:21

零代码ETL实战:CSV、文本、Excel全解析

1 案例说明ETL 过程的第一步,是从一个或多个数据源获取数据。数据获取是一项复杂且具有挑战性的工作,其难点主要源于数据源的多样性与复杂性。在传统数据仓库环境中,数据通常来源于企业内部的事务类应用系统,例如财务系统或 ERP 系…

作者头像 李华
网站建设 2026/7/9 4:26:12

开启嵌入式软件开发重新学习历程

纪念这一天!一定一定要在大三,甚至大二,就去找实习,千万别错过校招。一一一定定定做好职业规划,不要东一下,西一下。选好职业方向。血的教训。一定要重视实习,重视校招。选定一个方向&#xff0…

作者头像 李华