mysql与sql server的语法有什么区别

mysql与“sql server”的语法区别:1、mysql支持enum和set类型,而“sql server”不支持;2、mysql的递增语句是“AUTO_INCREMENT”,而“sql server”的是identity;3、“sql server”默认到处表创建语句的默认值表示是“((0))”,而mysql里不允许带两个括号。

mysql与sql server的语法有什么区别

本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。

mysql与sql server的语法有什么区别

详细介绍:

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

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

基础语法

注释:在俩种数据库中注释的语法是一致的,示例:

# 单行注释-- 单行注释(注意是杠杠空格)/* 多行注释*/

语句结尾:

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

示例:

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

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

use Student-- 假设SC数据表在Student库下,此时如果不写go会报错goselect * 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不支持

DDL&DML语句

建库

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])][LOG ON (    NAME='test_log',    FILENAME='D:test_log.ldf',    [SIZE=1024KB/MB/GB/TB,]    [MAXSIZE = 5120KB/MB/GB/TB/UNLIMITED,]    [FILEGROWTH = 1024KB/MB/GB/TB/%])]GO/* 其中:ON表示后面定义的是数据文件ON PRIMARY表示定义主数据文件LOG ON表示定义日志文件NAME表示文件逻辑名FILENAME表示文件物理名SIZE表示初始大小,至少为模板数据库model的大小(主数据文件与日志文件分别是3M与1M)MAXSIZE表示文件最大大小,可以为UNLIMITED(无限制)FILEGROWTH表示文件大小增长速度,默认值10%,每次最少增加64kb默认单位都是MB注意:括号中最后一行无逗号,其他行都需要逗号*/

查看库

打开指定库(一致)

俩者语法一致,都是use 库名

查看所有数据库

mysql:

-- 查看当前所有数据库:show databases;-- 查询某个数据库的字符集(查询数据库的创建语句即可实现):show create database name;

SQLServer:

-- 查看当前所有数据库:select name, database_id, create_date from sys.databasesgo-- SQLServer中的数据库信息存储在sys.databases中-- 表示查询数据库名字,数据库id与创建时间,固定写法-- 查看数据库信息sp_helpdb 数据库名go

修改库

注意:不管是哪种数据库,修改库的信息我们都是很少做的

mysql:

-- 对数据库重命名RENAME DATABASE 数据库旧名 TO 数据库新名;-- 修改数据库的字符集ALTER DATABASE 数据库名 CHARACTER SET 字符集名;

SQLServer:

-- 对数据库重命名sp_renamedb oldname, newnamego-- 待补充

删除库(一致)

语法:

DROP DATABASE [IF EXISTS] 数据库名;

建表

最大容量

SQLServer每个表最多能有1024列,每行最多允许有8060个字节

MySQL一个表的总字段长度不能超过65535

建表语法(基本一致)

为什么说是基本一致呢,因为在SQLServer建表中,可以通过在表名前面加上db_name.dbo的形式来指定所属数据库与所有者,而在mysql中我暂时是没看到类似语法的

语法:

CRATE TABLE [IF NOT EXISTS] 表名(列名 列的类型[(长度) 约束],列名 列的类型[(长度)约束],列名 列的类型[(长度)约束],...列名 列的类型[(长度)约束]);-- 注:-- 约束是可选项,不一定要填写-- 最后一列的后面不需要添加逗号,其他每一列都需要添加逗号-- SQLServer中不能通过这种IF NOT EXISTS的形式判断是否存在-- SQLServer中的所有判断是否存在都只能通过IF EXISTS(查询语句)的方法实现-- 检查表是否存在示例:IF EXISTS(select count(*)           from dbo.sysobjects         where name = 'table_name')go-- 检查字段是否存在示例:IF EXISTS(select count(*)           from dbo.syscolumns         where id = object_id('table_name')          and name = 'column_name')go-- 或者:if DB_ID('name') is not null -- 不存在create TABLE....

查看表

mysql:

-- 查询数据库中所有表(SQLServer没有):show tables [from 数据库名;-- 查看表结构(SQLServer没有)desc 表名; # 查看指定表下的数据结构-- 使用database()函数查看当前处于哪个数据库(SQLServer没有)select database();

SQLServer:

-- 查询当前数据库内所有表,固定写法select * from sysobjects where xtype = 'U'-- 查看表结构sp_help 表名; -- 或者:sp_columns 表名;-- 也可以在前面加上exec

修改表

修改表名

mysql:

ALTER TABLE name rename [to] newName;

SQLServer:

exec sys.sp_rename

修改语句

SQLServer中没有change与modify语句,因此SQLServer使用俩个alter

删除表

基本一致

分离与附加数据库:

SQLServer:

-- 分离数据库sp_detach_db 数据库名go-- 附加数据库exec sp_attach_db [@dbname = ]'数据库名',[@filename1 = ]'包含路径的文件物理名'[...16]go-- 数据库文件最多可以指定16个

约束/索引

递增语句MySQL是AUTO_INCREMENT,SQLServer是identify(10.1),从10开始一次加1

mysql不支持检查索引(check),SQLServer支持

数据类型

MySQL中没有nchar,nvarchar,ntext等类型

SQLServer使用datetime类型作为获取默认值为当前时间的数据类型

而MySQL使用timestamp时间错类型实现这个效果

MySQL支持无符号的整数类型,而SQLServer不支持

DQL语句

查询前几条记录:

SQLServer提供了top关键字

而MySQL使用limit关键字

示例:

select * from Student limit 100;select top 100 * from Student;

全外连接

mysql 不支持 直接写full outer join 或者 full join 来表示全外连接但是可以用union联合查询 代替

而SQLServer支持全外连接

其余查询语法基本一致

常见函数

调用函数方法

MySQL与SQLServer调用函数都是使用select调用函数,示例:

SELECT 函数名(参数列表);

获取当前时间

MySQL可以使用current_date()函数获取当前日期,或者使用CURRENT_TIME()函数只获取当前时间,或者使用CURRENT_TIMESTAMP()函数与now()函数获取当前的完整时间,示例:

SELECT CURRENT_DATE(); -- 2021-12-27SELECT CURRENT_TIME(); -- 01:42:23SELECT CURRENT_TIMESTAMP(); -- 2021-12-27 01:42:23SELECT NOW(); -- 2021-12-27 01:42:23

而SQLServer可以使用getdate()方法获取当前时间日期,示例:

SELECT getdate();-- 返回值:2021-12-27 01:40:40.907

判空函数

mysql:

-- 1. ifnull(exp1,exp2);-- 表示当exp1为空时值为exp2,不为空时值为exp1-- 2. isnull(exp1);-- 当exp1为空时返回1,不为空时返回0-- 3. 同时在MySQL中还提供了if函数(与if结构语句不同),示例:if (exp1,exp2,exp3)-- 表示当条件表达式exp1成立时返回exp2.否则返回exp3-- 类似于java中的三目表达式,SQLServer中没有这个函数

SQLServer:

-- 1. isnull(exp1,exp2);-- 表示当exp1为空时值为exp2,不为空时值为exp1-- 没有ifnull()函数-- 相对来说mysql的ifnull和isnull函数容易理解一点

字符串连接函数

mysql:

-- 使用concat()函数,示例:SELECT CONCAT('我','在','学习mysql');-- 不能使用+连接字符串!

SQLServer:

-- 1. 使用加号+连接字符串select 'hello'+'SQL'-- 2. 使用concat()函数,示例:SELECT CONCAT('我','在','学习mysql');

流程控制结构

IF结构

mysql需要在if 条件后以及else后添加then再写语句

并且mysql中的IF结构只能写在begin end块中

语法:

-- 语法IF 条件1 THEN 语句1;ELSEIF 条件2 THEN 语句2;...ELSE 语句n;END IF; -- 表示IF结构结束了-- 注释:只能用于BEGIN END块中-- 语句中只有一条时可以省略begin end

而在SQLServer中不需要写then

语法:

IF (条件1)BEGIN语句1ENDelseBEGIN语句2ENDgo-- 示例:IF (EXISTS (select Sno from Student where Sno = '200001'))select Sno from Student where Sno = '200001'ELSEprint '没有改学生'go

case结构(一致)

都需要使用then

不需要写Begin,只需要写END,分为俩种形式:

case后可以带一个值,在when中通过判断这个值的取值来达到选择效果(switch-case形式)

也可以不带值,在when语句中写条件判断式(多重IF形式)

语法:

-- 1:case 要判断的字段或表达式    when 常量1 then 要显示的值1或语句1    when 常量2 then 要显示的值2或语句2    ...    else 要显示的值n或语句n    end-- 2:case     when 条件1 then 要显示的值1或语句1    when 条件2 then 要显示的值2或语句2    ...    else 要显示的值n或语句nend

循环结构

基本一致

但是在MySQL中在while循环后面需要加上do关键字

同时在end后面需要写上循环类型与循环表示,例如:WHILE [标签];

SQLServer不用

视图

mysql视图中的from子句不允许存在子查询,而SQLServer支持

推荐学习:mysql视频教程

以上就是mysql与sql server的语法有什么区别的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/171510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
京东外卖店铺收藏在哪里看?京东外卖店铺装修图片
上一篇 2025年11月1日 02:44:59
SpringBoot集成Redis:如何查看应用发送给Redis服务器的指令?
下一篇 2025年11月1日 02:45:04

相关推荐

  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • MySQL数据库不支持中文的解决办法

    接上一篇文章,在解决了mysql+flask环境配置问题之后,往数据库存中文字符串会报1366错误,提示不正确的字符。继而发现默认的mysql采用了latin1字符集,这种编码是不支持中文的。 如果想支持中文的话,需要设置一下mysql字符集。 众所周知utf-8是可以的,gbk也没问题,为了可扩展…

    用户投稿 2026年5月10日
    000
  • Go语言连接外部MySQL数据库:DSN配置与常见错误解析

    本文详细阐述了go语言使用`go-sql-driver/mysql`驱动连接外部mysql数据库的正确方法。重点介绍了数据源名称(dsn)的规范格式,特别是主机地址部分的配置,以避免常见的“getaddrinfow: the specified class was not found.”等网络解析错…

    2026年5月10日
    000
  • 后缀php怎么打开_php文件打开方式与运行环境搭建指南

    要打开PHP文件需根据用途选择方式:查看代码可用文本编辑器或IDE,运行则需服务器环境。推荐新手使用XAMPP、WAMP等集成环境,将文件放入htdocs目录后访问localhost;开发者可利用PHP内置服务器,命令行执行php -S localhost:8000运行;高级用户可手动配置Apach…

    2026年5月10日
    000
  • PHP动态网页数据库备份恢复_PHP动态网页MySQL数据库备份教程

    答案:PHP动态网页的MySQL数据库备份与恢复需通过定期导出SQL文件并安全存储来保障数据安全,核心方法包括使用mysqldump命令行工具实现高效灵活的自动化备份,利用phpMyAdmin图形化工具进行手动导出导入以降低操作门槛,以及通过PHP脚本调用系统命令将备份过程集成到应用中;恢复时可采用…

    2026年5月10日
    000
  • php登录怎么实现_php用户登录系统完整实现

    <blockquote>PHP用户登录系统的核心是安全验证与会话管理。首先创建POST提交的登录表单,避免敏感信息暴露;后端通过session_start()启动会话,使用trim()和htmlspecialchars()清理输入,防止XSS攻击;利用PDO预处理语句查询数据库,防止SQ…

    用户投稿 2026年5月10日
    000
  • 远程MySQL数据库连接指南:从本地PHP应用访问GCP实例数据库

    本文详细指导如何在本地php应用中连接到google cloud platform (gcp) 虚拟机实例上的远程mysql数据库。教程涵盖了数据库连接参数的配置、使用php pdo建立连接的方法、gcp环境下的网络配置要点,以及常见的安全和故障排除建议,旨在帮助开发者顺利实现跨环境的数据库通信。 …

    2026年5月10日
    000
  • 在PHP中实现MySQL数据插入时避免重复记录的策略

    本文将探讨在php应用中向mysql数据库插入数据时,如何有效避免重复记录的产生。针对当主键或唯一索引字段值已存在的情况,我们将介绍使用`insert ignore`语句的策略,以确保数据完整性并防止不必要的重复插入,从而简化数据管理逻辑。 引言:数据完整性与重复记录问题 在数据库管理中,数据完整性…

    2026年5月10日
    000
  • php实现哪些功能

    PHP是一种通用脚本语言,可用来实现广泛的功能,包括:动态Web开发:生成响应用户请求的动态 веб页面。内容管理系统(CMS):构建允许用户管理网站内容的CMS。电子商务:开发具有购物车、订单处理和支付网关集成的电子商务网站。服务器端编程:编写命令行脚本和工具。文件操作:创建、读取、写入和删除文件…

    2026年5月10日
    000
  • PHP 动态 SQL WHERE 子句构建:避免重复 AND 的策略

    本文探讨了在 php 中动态构建 sql 查询 `where` 子句时常见的“`where and`”语法错误及其解决方案。通过逐步构建条件字符串,确保第一个条件不带 `and`,后续条件正确使用 `and` 连接,从而生成符合 sql 规范的查询语句,提高代码的健壮性和可读性。 动态构建 SQL …

    2026年5月10日
    200
  • PHP中基于用户角色的页面访问控制实践

    本教程详细讲解如何在PHP应用程序中利用会话(Session)机制实现基于用户角色的页面访问控制。通过正确的session_start()调用、用户登录时的角色信息存储,以及在受保护页面进行严格的会话和角色类型检查,确保只有特定用户(如“manager”)才能访问指定页面,从而有效防止未经授权的访问…

    2026年5月10日
    100
  • php数据库触发器应用实例_php数据库自动化任务的处理

    通过MySQL触发器与PHP结合,可在数据变更时自动记录日志、校验数据及同步状态。首先创建user_log表并定义AFTER INSERT/UPDATE/DELETE触发器,记录users表的操作信息;随后使用PHP的PDO执行增删改操作,验证日志生成;接着创建BEFORE INSERT触发器限制非…

    2026年5月10日
    000
  • php数据库数据压缩处理_php数据库存储空间优化方法

    可通过启用MySQL行压缩、PHP层数据压缩、优化字段结构及分表归档策略减少存储占用。具体步骤:1. 使用InnoDB压缩表并设置KEY_BLOCK_SIZE;2. PHP中用gzcompress压缩大数据字段,存为BLOB;3. 选用更小数据类型如TINYINT,避免冗余TEXT;4. 将历史数据…

    2026年5月10日
    100
  • php数据整理怎么按日期字段分组汇总_php按日期分组统计与时间段合并技巧

    可使用SQL或PHP对数据按日期分组汇总。1、通过MySQL的DATE()、YEAR()、MONTH()函数在查询时按日、月、年分组统计;2、在PHP中遍历数组,以date(‘Y-m-d’)等格式化日期作为键进行归类;3、按周可使用date(‘o-W’…

    2026年5月10日
    000
  • php数据库如何实现全文搜索 php数据库搜索引擎的构建方法

    答案:在PHP项目中实现数据库全文搜索需利用MySQL的FULLTEXT索引功能,通过PDO预处理语句执行MATCH()…AGAINST()查询,结合PHP过滤用户输入以防止SQL注入;为提升体验可引入中文分词、权重排序、结果高亮等优化措施;数据量增长后可迁移至Elasticsearch…

    2026年5月10日
    000
  • php调用数据同步方案_php调用多数据库数据同步

    首先明确同步需求与模式,如单向、双向、定时或实时同步;接着使用PHP通过PDO连接多数据库,基于时间戳或增量ID同步变更数据,并记录同步状态;为提高可靠性,可引入消息队列、binlog解析、中间同步层及加锁机制;最后注意网络超时、分页处理、错误重试、日志记录与测试验证,确保数据一致性与系统稳定性。 …

    2026年5月10日
    000
  • php怎么安装_在云服务器上部署PHP环境的步骤

    答案:在云服务器上部署PHP环境需搭建LEMP栈(Linux+Nginx+MySQL+PHP-FPM),依次更新系统、安装Nginx、MariaDB、PHP-FPM及扩展,配置Nginx解析PHP并测试,最后通过权限控制、安全配置、防火墙和HTTPS等措施保障环境安全稳定。 在云服务器上部署PHP环…

    2026年5月10日
    000
  • 使用MySQL和PHP高效获取最热门数据条目:统计与排序实践

    本教程详细阐述如何利用mysql的聚合函数和php的mysqli扩展,高效地从数据库中查询并排序出最常出现的数据条目。文章将通过一个具体的案例,指导读者构建正确的sql查询,并结合php进行数据处理和调试,避免常见的sql语法错误和php运行时问题,从而准确获取按频率降序排列的热门数据。 在Web开…

    2026年5月10日
    000
  • SQL查询:精确判断事件过期,结合日期与时间列

    本文旨在解决数据库中事件过期判断不精确的问题,特别是当事件的过期日期和时间分别存储在不同列时。我们将探讨两种主流的sql查询策略:一种是利用逻辑运算符`or`和`and`进行分情况判断,另一种是通过合并日期和时间列为单一时间戳进行直接比较。文章将详细阐述每种方法的实现方式、适用场景及相关注意事项,确…

    2026年5月10日
    200
  • HTML表单如何实现白名单功能?怎样只允许授权用户?

    要实现%ignore_a_1%的白名单功能并确保只有授权用户操作,核心答案是必须依赖后端服务器进行严格的身份认证、会话管理、授权检查和数据验证,前端仅能提供用户体验层面的初步提示而不能保障安全;具体而言,首先通过用户身份认证(如用户名/密码或oauth)确认用户身份,服务器创建会话并返回标识符,后续…

    2026年5月10日
    800

发表回复

登录后才能评论
关注微信