19_MySQL与SQLServer的语法区别(超详细)

1. 摘要

​ 对于很多先学习MySQL再学习SQLServer的初学者来说,很难受的一件事情莫过于在这俩者的语法中有一些细微的细节差异让人无法适应,例如SQLServer中并没有modify与change等关键字,又或者MySQL中的每条语句以;结尾,而SQLServer却是使用go这一关键字表示一段批处理语句的结束等等…

​ 本文正是在这种情况下出现,希望帮助同时学习这俩们SQL语言的人了解这俩种数据库的语法异别

​ 注:由于博主能力有限,无法做到对所有语法进行归纳总结,缺漏或错误之处还望指正,轻喷
最后,新的一年开始,祝福大家2022顺顺利利健健康康阖家幸福,都成为秃头大佬

2. 基础语法

  1. 注释:在俩种数据库中注释的语法是一致的,示例:
# 单行注释
-- 单行注释(注意是杠杠空格)
/* 
多行注释
*/
  1. 语句结尾:

    在MySQL中必须使用;分隔每条语句并作为语句结尾,当有多条语句一起执行时如果语句间没有使用分号分隔会报错

    示例:

use Student; -- 同时运行俩条语句时不用;分隔语句会报错
select * from SC;

而在SQLServer中分号是可选的,你可以选择加也可以选择不加,同时SQLServer中提供了go关键字,作为批处理语句的结尾,建议写SQLServer时使用go结束,这样子在下一段语句需要上一段语句执行完才能执行的情况下不会报批处理错误,示例:

use Student
-- 假设SC数据表在Student库下,此时如果不写go会报错
go
select * from SC
  1. 存储引擎:

    在mysql中常用的有InnoDB | MyISAM | MEMORY | MERGE等存储引擎,其中使用最多的是InnoDB

    而在SQLServer中数据库的存储分为逻辑实现与物理实现,示意图:

在这里插入图片描述

在这里插入图片描述

其中主数据文件有且仅有一个,次数据文件可以有n个(0-n),日志文件可以有一到多个(至少有一个)

同时MySQL在创建表时可以指定表的存储引擎(默认InnoDB),而SQLServer只有一种存储引擎

  1. MySQL可以使用单引号与双引号,而SQLServer只支持单引号

  2. 都不严格区分大小写

  3. 定位某张表

    mysql:库名.表名,示例:Student.SC

    SQLServer:库名.dbo.表名 或者 库名…表名

    其中dbo为数据库所有者(Database Owner),即有权限访问数据库的用户,是唯一的,拥有这个数据库的全部权限,并能给其他用户提供访问权限与功能

    示例:

Student.dbo.SC -- 或者:
Student..SC
  1. SQLServer中的exec关键字:
-- 1. exec 存储过程名 参数1, 参数2....
-- 注意:执行存储过程时是不加括号的
-- 2. exec('sql语句'),表示执行该语句
  1. SQLServer高级语法中提供了一系列的sp命令

  2. SQLServer中的系统数据库:

    master:记录系统的所有系统级信息

    model:模板数据库

    msdb:存储计划信息,备份与恢复相关信息,SQLServer代理程序调度报警与作业调度等信息

    tempdb:临时数据库,他为所有的临时表,临时存储过程以及其他所有临时操作提供存储空间

    resource:隐藏的只读数据库,包含所有系统对象,但不含用户数据或用户原数据

  3. mysql中的系统数据库:

    information_schema:提供了访问数据库元数据的方式。(元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有时用于表述该信息的其他术语包括“数据词典”和“系统目录”) ,即保存着关于MySQL服务器所维护的所有其他数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等

    在INFORMATION_SCHEMA中,有几张只读表。它们实际上是视图,而不是基本表

    mysql:核心数据库(类似于SQLServer的master表),存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息,例如修改root用户密码就需要使用这个数据库

    performance_schema;

    sys;

  4. 在负载压力相同时,MySQL消耗的内存和CPU更少

  5. 在SQLServer中还提供了打印语句print,mysql中没有,示例:

-- print自带换行
print 'hello'
  1. 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
  • 26
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
sqlservermysql语句在一些方面存在差异。首先,它们在语句结束标志上有所区别MySQL使用分号 ";" 结束一条SQL语句,而SQL Server可以使用分号、"go"或者不写来结束一条SQL语句。在SQL Server中,使用"go"关键字来区分不同的批处理操作,这对于确保语句的正确顺序很重要。另外,查询表结构和数量的语句也存在差异。具体来说,SQL Server使用不同的系统表来查询表结构和数量,而MySQL则使用"DESCRIBE"和"COUNT"函数来实现相同的功能。请注意,这只是sqlservermysql语句差异的一部分,还有其他方面的差异需要注意和学习。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL和Sql Server的sql语句区别](https://blog.csdn.net/u010121883/article/details/50396793)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [sql server 与 mysql 中常用的SQL语句区别](https://blog.csdn.net/weixin_37610397/article/details/80273070)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值