Mysql 与Mssql 的语法区别

今天刷Letcode的数据库题目,看到第二个题目:查找第二高薪水的时候看见有Limit这个用法,当时并没有关于Limit的一点印象.之后在W3上看到这是Mysql的单独语法。原来我以为SQL 的基础查询语句都是一样的,只是一个开源一个不开源。

现在归总一下两个数据库语法的差异点:

  1. mysql支持enum,和set类型,sql server不支持
# mysql语句:

create table t1(
    id int primary key auto_increment,                
    name varchar(16) not null,                        
    sex enum('male','female') not null default 'male'
);
# sql server语句:

CREATE TABLE Users(
    id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
    name NVARCHAR(50) NOT NULL,
    sex NVARCHAR(2) CHECK(sex='男' OR sex='女')
)
  1. 就是头部查询。个人觉得limit + offset 的语法规则比MS里面的row_number() over()函数好用的多;
    limit n,m表示从第n+1条开始,取m条
# Mssql Syntax:

SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;

# MySQL Syntax:

SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;

# Oracle Syntax:

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
  1. mysql不支持nchar,nvarchar,ntext类型
    就是带“n” 的就是Unicode的编码,否则是你数据库设置的
    还有一种就是二进制流的数据格式,好像不常用
  2. mysql的递增语句是AUTO_INCREMENT,而mssql是identity(1,1)
  3. mysql不支持默认值为当前时间的datetime类型,在mysql里面是用timestamp类型
  4. mysql在创建表时要为每个表指定一个存储引擎类型,而mssql只支持一种存储引擎
  5. mysql不支持在mssql里面使用非常方便的varchar(max)类型,这个类型在mssql里面既可做一般数据存储,也可以做blob数据存储

一个二进制大对象(BLOB)是一个集合的二进制数据存储为单个实体的数据库管理系统。Blob通常是图像,音频或其他多媒体对象,但有时二进制可执行代码存储为blob。blob的数据库支持并不普遍。
Blob最初只是由Jim Starkey在DEC发明的巨大的无定形数据块,他们将这些数据描述为“1958年Steve McQueen电影中的辛辛那提,克利夫兰或其他任何东西”,[1]指的是The Blob。后来,Apollo的营销人员Terry McKiever 觉得它需要成为首字母缩略词,并发明了后备的 Basic Large Object。然后,Informix发明了一种替代的Backronym,Binary Large Object。[2]
引入数据类型和定义来描述最初未在传统计算机数据库系统中定义的数据,特别是因为它太大而不能在20世纪70年代和80年代首次定义数据库系统领域时实际存储。当磁盘空间变得便宜时,数据类型变得实用。这个定义在IBM的DB2中得到了普及。[ 引证需要 ]
该术语用于NoSQL数据库,尤其是在Redis等键值存储数据库中。[3] [4]
深度学习软件Caffe进一步借用名称“blob” 来表示多维数组。
在免费和开源软件的世界中,这个术语也被借用来指代专有设备驱动程序,这些驱动程序是在没有源代码的情况下通过二进制代码分发的; 在这种用法中,术语二进制blob是常见的,即使blob缩写中的第一个字母已经代表二进制。
----------------------------------------------------------------------------------------------------------------------------------查询来源于维基百科