admin 管理员组

文章数量: 887021


2023年12月23日发(作者:尾组词)

按语句功能划分,依次讲解

Mysql和sqlServer命令比较

目录

一数据定义 ............................................................................................................................... 2

1 数据库操作基本命令 ....................................................................................................... 2

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

2.1

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

2.1.1 创建primary key ..................................................................................................... 2

2.1.2 撤销 PRIMARY KEY 约束 ....................................................................................... 3

2.1.3 创建外健约束 ......................................................................................................... 3

2.1.4 撤销外健约束 ......................................................................................................... 4

2.2

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

2.2.1 创建UNIQUE约束 .................................................................................................. 4

2.2.2 撤销 UNIQUE 约束 ................................................................................................ 5

2.3

CHECK 约束 ........................................................................................................... 5

2.3.1 创建 CHECK约束 ................................................................................................... 5

2.3.2 撤销 CHECK约束 ................................................................................................... 6

2.4

DEFAULT 约束(系统默认值) ........................................................................... 6

2.4.1 创建DEFAULT约束 ................................................................................................ 6

2.4 .2 撤消DEFAULT约束 ............................................................................................... 7

2.5

2.6

2.7

索引区别 ................................................................................................................ 7

主键自动增加的区别 ............................................................................................ 7

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

2.7.1

枚举enum .............................................................................................................. 8

2.7.2

集合set .................................................................................................................. 9

2.8

3

4

5

MySQL不支持nchar,nvarchar,ntext类型 .......................................................... 10

DROP TABLE –删除一个数据库表 .............................................................................. 10

显示库表...................................................................................................................... 11

alter 修改库表 ............................................................................................................ 11

二 数据操作 ........................................................................................................................... 12

2.1 limit和top ................................................................................................................ 12

2.2 ISNULL()函数 ............................................................................................................. 12

2.3 select查询 ................................................................................................................. 12

2.4 insert 插入 ................................................................................................................ 12

2.6 update 修改.............................................................................................................. 12

2.7 delete 删除 ............................................................................................................... 13

三 语法定义 ........................................................................................................................... 13

3.1 注释符区别 .............................................................................................................. 13

3.2 识别符的区别 .......................................................................................................... 13

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

3.4字符串连接 ............................................................................................................... 14

四 函数和数据类型的区别 ................................................................................................... 14

4.1 Date 函数 ................................................................................................................. 14

五性能比较 ............................................................................................................................. 15

一数据定义

1 数据库操作基本命令

Mysql:

create database name; 创建数据库

use databasename; 选择数据库

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

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

2.1 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

2.2 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

2.3 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我没有找到怎么删除。

2.4 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

2.5 索引区别

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

Mysql: ALTER TABLE table_name DROP INDEX index_name

2.6 主键自动增加的区别

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)

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

2.7.1

枚举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 |

+------+

2.7.2 集合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 |

+-------+

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

3 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$指的均是数据库表名

4 显示库表

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 |

5 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存储过程的区别(未经验证,从网上找的)

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

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

(3) Mysql的Execute对应SqlServer的exec;

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

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

Prepare str from @cnt;

Execute str;

(4) MySql存储过程调用其他存储过程用call

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

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

into @a;

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

(7) )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;

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

(9) 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的确是很耗资源。


本文标签: 约束 区别 数据库 过程 创建