Mysql和sqlServer命令比较

按语句功能划分

目录

一数据定义

1 数据库操作基本命令

2 CREATE TABLE --创建一个数据库表

2.1 PRIMARY KEY 约束(主键)区别解析:

2.1.1 创建primary key

2.1.2 撤销 PRIMARY KEY 约束

2.1.3 创建外健约束

2.1.4 撤销外健约束

2.2 UNIQUE 约束(唯一的,独一无二的)区别解析

2.2.1 创建UNIQUE约束

2.2.2 撤销 UNIQUE 约束

2.3 CHECK 约束

2.3.1 创建 CHECK约束

2.3.2 撤销 CHECK约束

2.4 DEFAULT 约束(系统默认值)

2.4.1 创建DEFAULT约束

2.4 .2 撤消DEFAULT约束

2.5 索引区别

2.6 主键自动增加的区别

2.7 MySQL支持enum,和set类型,SQL Server不支持

2.7.1 枚举enum

2.7.2 集合set

2.8 MySQL不支持nchar,nvarchar,ntext类型

3 DROP TABLE --删除一个数据库表

4 显示库表

5 alter 修改库表

二 数据操作

2.1 limit和top

2.2 ISNULL()函数

2.3 select查询

2.4 insert 插入

2.6 update 修改

2.7 delete 删除

三 语法定义

3.1 注释符区别

3.2 识别符的区别

3.3存储过程的区别(未经验证,从网上找的)

3.4字符串连接

四 函数和数据类型的区别

4.1 Date 函数

五性能比较

一数据定义

1 数据库操作基本命令

Mysql:

create database name; 创建数据库

use databasename; 选择数据库

drop database name 直接删除数据库,不提醒 --

2 CREATE TABLE --创建一个数据库表

PRIMARY KEY 约束(主键)区别解析:

2.1.1 创建primary key

Mysql:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

PRIMARY KEY (Id_P) //声明主健写在最后

)

SqlServer:

CREATE TABLE Persons

(

Id_P int NOT NULL PRIMARY KEY, //声明主健 紧跟列后

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

但是如果表存在,之后给表加主健时:

Mysql 和SqlServer

ALTER TABLE Persons ADD PRIMARY KEY (Id_P)

2.1.2撤销 PRIMARY KEY 约束

MySQL:

ALTER TABLE Persons DROP PRIMARY KEY

SQL Server

ALTER TABLE Persons DROP CONSTRAINT pk_PersonID

2.1.3 创建外健约束

MySQL:

CREATE TABLE Orders

(

O_Id int NOT NULL,

OrderNo int NOT NULL,

Id_P int,

PRIMARY KEY (O_Id),

FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) //写在最后

)

SQL Server

CREATE TABLE Orders

(

O_Id int NOT NULL PRIMARY KEY,

OrderNo int NOT NULL,

Id_P int FOREIGN KEY REFERENCES Persons(Id_P) //顺序不同

)

如果在 "Orders" 表已存在的情况下为 "Id_P" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:

MySQL / SQL Server

ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)

2.1.4 撤销外健约束

MySQL:

ALTER TABLE Orders DROP FOREIGN KEY f k_PerOrders

SQL Server

ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders

UNIQUE 约束(唯一的,独一无二的)区别解析

UNIQUE 约束唯一标识数据库表中的每条记录。

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

2.2.1 创建UNIQUE约束

MySQL:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

UNIQUE (Id_P) //写在最后

)

SQL Server

CREATE TABLE Persons

(

Id_P int NOT NULL UNIQUE, //紧跟列后

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

2.2.2 撤销 UNIQUE 约束

MySQL:

ALTER TABLE Persons DROP INDEX uc_PersonID

SQL Server

ALTER TABLE Persons DROP CONSTRAINT uc_PersonID

CHECK 约束

CHECK 约束用于限制列中的值的范围。

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

2.3.1 创建 CHECK约束

下面的 SQL 在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。

My SQL:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CHECK (Id_P>0) //写在最后

)

SQL Server

CREATE TABLE Persons

(

Id_P int NOT NULL CHECK (Id_P>0), //紧跟列后

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法:

MySQL / SQL Server:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes') //多个条件

)

如果在表已存在的情况下为 "Id_P" 列创建 CHECK 约束,请使用下面的 SQL:

MySQL / SQL Server:

ALTER TABLE Persons ADD CHECK (Id_P>0)

2.3.2 撤销 CHECK约束

Sqlserver:

ALTER TABLE Persons DROP CONSTRAINT chk_Person

Mysql我没有找到怎么删除。

DEFAULT 约束(系统默认值)

DEFAULT 约束用于向列中插入默认值。

如果没有规定其他的值,那么会将默认值添加到所有的新纪录。

2.4.1 创建DEFAULT约束

下面的 SQL 在 "Persons" 表创建时为 "City" 列创建 DEFAULT 约束:

My SQL / SQL Server:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255) DEFAULT 'Sandnes' //紧跟列后,默认值字符串Sandnes

)

通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:

CREATE TABLE Orders

(

Id_O int NOT NULL,

OrderNo int NOT NULL,

Id_P int,

OrderDate date DEFAULT GETDATE() //紧跟列后,函数

)

如果在表已存在的情况下为 "City" 列创建 DEFAULT 约束,请使用下面的 SQL:

MySQL:

ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'

SQL Server:

ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'SANDNES'

2.4 .2 撤消DEFAULT约束

MySQL:

ALTER TABLE Persons ALTER City DROP DEFAULT

SQL Server:

ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT

索引区别

CREATE INDEX 语句

CREATE INDEX 语句用于在表中创建索引。

在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

在表上创建一个简单的索引。允许使用重复的值:

CREATE INDEX index_name ON table_name (column_name) //"column_name" 规定需要索引的列。

在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。

CREATE UNIQUE INDEX index_name ON table_name (column_name)

Mysql和SqlServer的创建索引都是一致的,但是在删除索引方面却有区别:

SqlServer: DROP INDEX table_name.index_name

Mysql: ALTER TABLE table_name DROP INDEX index_name

主键自动增加的区别

mySql的主键自动增加是用auto_increment字段,sqlServer的自动增加则是identity字段.

Auto-increment 会在新纪录插入表中时生成一个唯一的数字。

我们通常希望在每次插入新纪录时,自动地创建主键字段的值。

我们可以在表中创建一个 auto-increment 字段。

用于 MySQL 的语法

下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:

CREATE TABLE Persons

(

P_Id int NOT NULL AUTO_INCREMENT,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

PRIMARY KEY (P_Id)

)

MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。

默认地,AUTO_INCREMENT 的开始值是 1,每条新纪录递增 1。

要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:

ALTER TABLE Persons AUTO_INCREMENT=100

用于 SQL Server 的语法

下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:

CREATE TABLE Persons

(

P_Id int PRIMARY KEY IDENTITY,或则是写成P_id int primary key identity (1,1),

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

MS SQL 使用 IDENTITY 关键字来执行 auto-increment 任务。

默认地,IDENTITY 的开始值是 1,每条新纪录递增 1。

要规定 "P_Id" 列以 20 起始且递增 10,请把 identity 改为 IDENTITY(20,10)

MySQL支持enum,和set类型,SQL Server不支持

枚举enum

ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值.

枚举最多可以有65,535个元素。

枚举的简单用法举例:

mysql> create table meijut (f1 enum('1','2','3','4','5','6'));

mysql> desc meijut;

+-------+-------------------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------------------------+------+-----+---------+-------+

| f1 | enum('1','2','3','4','5','6') | YES | | NULL | |

+-------+-------------------------------+------+-----+---------+-------+

mysql> insert into meijut values(8);

mysql> select * from meijut

-> ;

+------+

| f1 |

+------+

| |

+------+

这个情况说明如果你将一个非法值插入ENUM(也就是说,允许的值列之外的字符串),将插入空字符串以作为特殊错误值。该字符串与"普通"空字符串不同,该字符串有数值值0。

mysql> insert into meijut values('3');

mysql> insert into meijut values(3);

mysql> insert into meijut values('4');

mysql> insert into meijut values('5');

mysql> select * from meijut;

+------+

| f1 |

+------+

| |

| 3 |

| 3 |

| 4 |

| 5 |

+------+

改表

mysql> alter table meiju modify f1 enum("a","b","c","d","e","f");

可以自动将记录当序号匹配成新的字段值

mysql> select * from meijut;

+------+

| f1 |

+------+

| |

| c |

| c |

| d |

| e |

+------+

集合set

mysql> create table jihe(f1 set('f','m'));

mysql> insert into jihe values('f');

可以按照序号输入 注意序号为 1 2 4 8 16 32 ....

mysql> insert into jihe values('3');

mysql> select * from jihe;

+------+

| f1 |

+------+

| f |

| f,m |

+------+

其他字母不能插入

mysql> insert into jihe values("q");

ERROR 1265 (01000): Data truncated for column 'f1' at row 1

插入空

mysql> insert into jihe values("0");

Query OK, 1 row affected (0.11 sec)

超出序号之和不能插入

mysql> insert into jihe values("4");

ERROR 1265 (01000): Data truncated for column 'f1' at row 1

集合 和 枚举的区别

1 集合可以有64个值 枚举有65535个

2 集合的序号是 1 2 4 8 16 枚举是 1 2 3 4 5 6

3 集合一个字段值可以有好几个值

+-------+

| f1 |

+-------+

| f,m |

+-------+

MySQL不支持nchar,nvarchar,ntext类型

DROP TABLE --删除一个数据库表

Mysql判断一个数据库表是否存在并删除的语句是:

drop table if exists jihe;

SqlServer判断一个数据库表是否存在并删除的语句是:

if exists (select * from sysobjects where name='Sheet1$' and xtype='U')

drop table Sheet1$

其中jihe和Sheet1$指的均是数据库表名

显示库表

Mysql:

Show tables;//显示一个库中的所有表

Desc table;/显示一个表的表结构

mysql> desc meijut;

+-------+-------------------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------------------------+------+-----+---------+-------+

| f1 | enum('a','b','c','d','e','f') | YES | | NULL | |

| f2 | int(11) | YES | | 0 | |

| f3 | text | YES | | NULL | |

+-------+-------------------------------+------+-----+---------+-------+

Show create table tablename;//显示一个表的详细创建信息

mysql> show create table meijut;

+--------+-------------------------------------------


---+

| Table | Create Table

|

+--------+-------------------------------------------


---+

| meijut | CREATE TABLE `meijut` (

`f1` enum('a','b','c','d','e','f') default NULL,

`f2` int(11) default '0',

`f3` text

) ENGINE=MyISAM DEFAULT CHARSET=utf8 |

alter 修改库表

重命名表: -

mysql > alter table t1 rename t2;

添加一列

mysql> alter table meijut add column f2 int default 0 ;

修改一列

mysql> alter table meijut modify f2 text;

二 数据操作

2.1 limit和top

SQL SERVER : select top 8 * from table1

MYSQL: select * from table1 limit 5或则是 limit 0,5;

注意,在MySQL中的limit不能放在子查询内,limit不同与top,它可以规定范围 limit a,b------范围a-b

2.2 ISNULL()函数

SqlServer:

select * from test where isnull(no,0)=0;

MySQL

MySQL 可以使用 ISNULL() 函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。

在 MySQL 中,我们可以使用 IFNULL() 函数,就像这样:

mysql> select * from test where ifnull(no,0)=0;

+----+------+

| id | no |

+----+------+

| 3 | NULL |

+----+------+

1 row in set (0.03 sec)

2.3 select查询

SELECT * FROM tablename

2.4 insert 插入

INSERT INTO table(col1,col2) values(value1,value2);

MySQL支持insert into table1 set t1 = '', t2='',但是MSSQL不支持这样写

2.6update 修改

Update tablename set col="value";

2.7 delete 删除

Delete from tablename;

三 语法定义

3.1 注释符区别

SqlServer的注释符为--和/**/

MySql的注释符为--和/**/和#

3.2 识别符的区别

MS SQL识别符是[],[type]表示他区别于关键字,但是MySQL却是 `,也就是按键1左边的那个符号

3.3存储过程的区别(未经验证,从网上找的)

mysql的存储过程中变量的定义去掉@;

SQLServer存储过程的AS在MySql中需要用begin .....end替换

Mysql的Execute对应SqlServer的exec;

(注意:必须想下面这样调用)

Set @cnt='select * from 表名';

Prepare str from @cnt;

Execute str;

MySql存储过程调用其他存储过程用call

Call 函数名(即SQLServer的存储过程名)('参数1','参数2',......)

select @a=count(*) from VW_Action 在mySql中修改为:select count(*) from VW_Action into @a;

MySQL视图的FROM子句不允许存在子查询,因此对于SQL Server中FROM子句带有子查询的视图,需要手工进行迁移。可通过消除FROM子句中的子查询,或将FROM子句中的子查询重构为一个新的视图来进行迁移。

)MySql存储过程中没有return函数,在MySql中可以用循环和out参数代替

If EXISTS(SELECT * FROM T_Chance WHERE FCustID=CostomerID) return 0

改写为:

(在参数中定义一个out变量:out temp varchar(100);)

BEGIN

Loop1:loop

SELECT count(*) FROM T_Chance WHERE FCustID=CostomerID int @cnt

If @cnt>0 then

begin

set temp=0;

leave loop1;

end;

end if

end loop loop1;

mysql的uuid()对应sql的GUID();

MySql的out对应SQLServer的output,且mysql 的out要放在变量的前面,SQLServer的output放在变量后面:

MySql out,in,inout的区别------

MySQL 存储过程 "in" 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。

MySQL 存储过程 "out" 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。

MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。

3.4字符串连接

SQLServer: Temp='select * from '+'tablename'+...+...

MySql:Temp=concat('select * from', 'tablecname',...,...)

四 函数和数据类型的区别

4.1 Date 函数

MySQL Date 函数

NOW() 返回当前的日期和时间

CURDATE() 返回当前的日期

CURTIME() 返回当前的时间

DATE() 提取日期或日期/时间表达式的日期部分

EXTRACT() 返回日期/时间按的单独部分

DATE_ADD() 给日期添加指定的时间间隔

DATE_SUB() 从日期减去指定的时间间隔

DATEDIFF() 返回两个日期之间的天数

DATE_FORMAT() 用不同的格式显示日期/时间

SQL Server Date 函数

GETDATE() 返回当前日期和时间

DATEPART() 返回日期/时间的单独部分

DATEADD() 在日期中添加或减去指定的时间间隔

DATEDIFF() 返回两个日期之间的时间

CONVERT() 用不同的格式显示日期/时间

SQL Date 数据类型

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

DATE - 格式 YYYY-MM-DD

DATETIME - 格式: YYYY-MM-DD HH:MM:SS

TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS

YEAR - 格式 YYYY 或 YY

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

DATE - 格式 YYYY-MM-DD

DATETIME - 格式: YYYY-MM-DD HH:MM:SS

SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS

TIMESTAMP - 格式: 唯一的数字

五性能比较

(1)一个很表面的区别就是MySQL的安装特别简单,而且文件大小才110M(非安装版),相比微软这个庞然大物,安装进度来说简直就是.....

(2)MySQL的管理工具有几个比较好的,MySQL_front,和官方那个套件,不过都没有SSMS的使用方便,这是MySQL很大的一个缺点。

(3)MySQL的存储过程只是出现在最新的版本中,稳定性和性能可能不如MS SQL。

(4)同样的负载压力,MySQL要消耗更少的CPU和内存,MS SQL的确是很耗资源。

相关推荐
WeiLai11123 分钟前
面试基础--MySQL SQL 优化深度解析
java·后端·sql·mysql·面试·架构
m0_742566605 分钟前
Mysql下载安装
数据库·mysql
北顾南栀倾寒6 分钟前
[杂学笔记]HTTP1.0和HTTP1.1区别、socket系列接口与TCP协议、传输长数据的时候考虑网络问题、慢查询如何优化、C++的垃圾回收机制
网络·c++·笔记·tcp/ip·mysql·http
搞不懂语言的程序员40 分钟前
数据库事务的 ACID,通过MVCC能做什么
java·开发语言·数据库
爱老的虎油42 分钟前
MySQL零基础教程16—表连接进阶
数据库·mysql
java—大象1 小时前
基于SpringBoot+mybatis+layui就业管理系统设计和实现
java·数据库·spring boot·后端·layui·mybatis
m0_748233641 小时前
MySQL的底层原理与架构
数据库·mysql·架构
CodeJourney.1 小时前
DeepSeek赋能Power BI:开启智能化数据分析新时代
数据库·人工智能·算法
迅~2 小时前
Linux·数据库INSERT优化
数据库
Stark、2 小时前
【MySQL数据库】SQL语法基础--DQL(入门级)
数据库·sql·mysql