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(增删改查)和事务控制上的核心思想基本一致,掌握这些语法映射后,大多数日常开发工作都可以快速适应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值