MySQL与SQLServer的区别解析
区别⼀
mysql⽀持enum,和set类型,sql server不⽀持
mysql不⽀持nchar,nvarchar,ntext类型
mysql的递增语句是AUTO_INCREMENT,⽽sql server是identity(1,1)
sql server默认到处表创建语句的默认值表⽰是((0)),⽽在mysql⾥⾯是不允许带两括号的
mysql需要为表指定存储类型
sql server识别符是[],[type]表⽰他区别于关键字,但是mysql却是 `,也就是按键1左边的那个符号
sql server⽀持getdate()⽅法获取当前时间⽇期,但是mysql⾥⾯可以分⽇期类型和时间类型,获取当前⽇期是cur_date(),当前完整时间是 now()函数
mysql⽀持insert into table1 set t1 = ‘’, t2 = ‘’ ,但是sql server不⽀持这样写
mysql⽀持insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)
sql server不⽀持limit语句,是⾮常遗憾的,只能⽤top 取代limt 0,N,row_number() over()函数取代limit N,M
mysql在创建表时要为每个表指定⼀个存储引擎类型,⽽sql server只⽀持⼀种存储引擎
mysql不⽀持默认值为当前时间的datetime类型(mssql很容易做到),在mysql⾥⾯是⽤timestamp类型
sql server⾥⾯检查是否有这个表再删除,需要这样:
if exists (select * from dbo.sysobjects where id = object_id(N’uc_newpm’) and OBJECTPROPERTY(id, N’IsUserTable’) = 1)
但是在mysql⾥⾯只需要 DROP TABLE IF EXISTS cdb_forums;
mysql⽀持⽆符号型的整数,那么⽐不⽀持⽆符号型的mssql就能多出⼀倍的最⼤数存储
mysql不⽀持在mssql⾥⾯使⽤⾮常⽅便的varchar(max)类型,这个类型在mssql⾥⾯既可做⼀般数据存储,也可以做blob数据存储mysql创建⾮聚集索引只需要在创建表的时候指定为key就⾏,⽐如:KEY displayorder (fid,displayorder) 在mssql⾥⾯必须要:create unique nonclustered index index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers
(username asc,appid asc)
mysql text字段类型不允许有默认值
mysql的⼀个表的总共字段长度不超过65XXX。
⼀个很表⾯的区别就是mysql的安装特别简单,⽽且⽂件⼤⼩才110M(⾮安装版),相⽐微软这个庞然⼤物,安装进度来说简直就是…
mysql的管理⼯具有⼏个⽐较好的,mysql_front,和官⽅那个套件,不过都没有SSMS的使⽤⽅便,这是mysql很⼤的⼀个缺点。
mysql的存储过程只是出现在最新的版本中,稳定性和性能可能不如mssql。
同样的负载压⼒,mysql要消耗更少的CPU和内存,mssql的确是很耗资源。
php连接mysql和mssql的⽅式都差不多,只需要将函数的mysql替换成mssql即可。
mysql⽀持date,time,year类型,mssql到2008才⽀持date和time。
区别⼆
⼀、数据定义
数据库操作基本命令
Mysql:
create database name; 创建数据库
use databasename; 选择数据库
drop database name 直接删除数据库,不提醒 –
CREATE TABLE --创建⼀个数据库表
2.1 PRIMARY KEY 约束(主键)区别解析:
Mysql:
2.1.1 创建primary key
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存储过程使用
Mysql和SqlServer的创建索引都是⼀致的,但是在删除索引⽅⾯却有区别:
SqlServer: DROP INDEX table_name.index_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.8 MySQL不⽀持nchar,nvarchar,ntext类型
⼆、数据操作
2.1 limit和top

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。