文章目录
1. 摘要
对于很多先学习MySQL再学习SQLServer的初学者来说,很难受的一件事情莫过于在这俩者的语法中有一些细微的细节差异让人无法适应,例如SQLServer中并没有modify与change等关键字,又或者MySQL中的每条语句以;
结尾,而SQLServer却是使用go
这一关键字表示一段批处理语句的结束等等…
本文正是在这种情况下出现,希望帮助同时学习这俩们SQL语言的人了解这俩种数据库的语法异别
注:由于博主能力有限,无法做到对所有语法进行归纳总结,缺漏或错误之处还望指正,轻喷
最后,新的一年开始,祝福大家2022顺顺利利健健康康阖家幸福,都成为秃头大佬
2. 基础语法
- 注释:在俩种数据库中注释的语法是一致的,示例:
# 单行注释
-- 单行注释(注意是杠杠空格)
/*
多行注释
*/
-
语句结尾:
在MySQL中必须使用
;
分隔每条语句并作为语句结尾,当有多条语句一起执行时如果语句间没有使用分号分隔会报错示例:
use Student; -- 同时运行俩条语句时不用;分隔语句会报错
select * from SC;
而在SQLServer中分号是可选的,你可以选择加也可以选择不加,同时SQLServer中提供了go
关键字,作为批处理语句的结尾,建议写SQLServer时使用go
结束,这样子在下一段语句需要上一段语句执行完才能执行的情况下不会报批处理错误,示例:
use Student
-- 假设SC数据表在Student库下,此时如果不写go会报错
go
select * from SC
-
存储引擎:
在mysql中常用的有InnoDB | MyISAM | MEMORY | MERGE等存储引擎,其中使用最多的是InnoDB
而在SQLServer中数据库的存储分为逻辑实现与物理实现,示意图:
其中主数据文件有且仅有一个,次数据文件可以有n个(0-n),日志文件可以有一到多个(至少有一个)
同时MySQL在创建表时可以指定表的存储引擎(默认InnoDB),而SQLServer只有一种存储引擎
-
MySQL可以使用单引号与双引号,而SQLServer只支持单引号
-
都不严格区分大小写
-
定位某张表
mysql:库名.表名,示例:Student.SC
SQLServer:库名.dbo.表名 或者 库名…表名
其中dbo为数据库所有者(Database Owner),即有权限访问数据库的用户,是唯一的,拥有这个数据库的全部权限,并能给其他用户提供访问权限与功能
示例:
Student.dbo.SC -- 或者:
Student..SC
- SQLServer中的exec关键字:
-- 1. exec 存储过程名 参数1, 参数2....
-- 注意:执行存储过程时是不加括号的
-- 2. exec('sql语句'),表示执行该语句
-
SQLServer高级语法中提供了一系列的sp命令
-
SQLServer中的系统数据库:
master:记录系统的所有系统级信息
model:模板数据库
msdb:存储计划信息,备份与恢复相关信息,SQLServer代理程序调度报警与作业调度等信息
tempdb:临时数据库,他为所有的临时表,临时存储过程以及其他所有临时操作提供存储空间
resource:隐藏的只读数据库,包含所有系统对象,但不含用户数据或用户原数据
-
mysql中的系统数据库:
information_schema:提供了访问数据库元数据的方式。(元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有时用于表述该信息的其他术语包括“数据词典”和“系统目录”) ,即保存着关于MySQL服务器所维护的所有其他数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等
在INFORMATION_SCHEMA中,有几张只读表。它们实际上是视图,而不是基本表
mysql:核心数据库(类似于SQLServer的master表),存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息,例如修改root用户密码就需要使用这个数据库
performance_schema;
sys;
-
在负载压力相同时,MySQL消耗的内存和CPU更少
-
在SQLServer中还提供了打印语句print,mysql中没有,示例:
-- print自带换行
print 'hello'
- MySQL支持enum和set类型,SQLServer不支持
3. DDL&DML语句
3.1 建库
mysql:
-- 直接创建即可
CREATE DATABASE [IF NOT EXISTS] 数据库名
[character set 字符集名];
SQLServer:
/* 除了数据库名字外还需要指定:
主数据文件逻辑名(一般与数据库同名),主数据物理文件名称(.mdf)
主数据文件初始大小(默认5MB),最大容量,增长速度
日志文件逻辑名(一般命名为库名字_log),日志物理文件名(.ldf)
日志文件初始大小(默认1MB),最大容量,增长速度
是否加上次要数据文件(.ndf),是否在增加几个日志文件....
并且逻辑文件命名需要与物理文件命名相对应
主数据文件逻辑默认名为数据库名
*/
-- 示例:
CREATE DATABASE 数据库名
[ON [PRIMARY]
(
NAME = 'test',
FILENAME='D:\test.mdf',
[SIZE=10240KB/MB/GB/TB, ]
[MAXSIZE = UNLIMITED/20480KB/MB/GB/TB,]
[FILEGROWTH = 10%/1024KB/MB/GB/TB