MySQL与SqlServer的区别

MySQL与SqlServer的区别

目前最流行的两种后台数据库即为Mysql 和 SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统,你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL(数据库管理标准)。还有,这两种数据库系统都支持二进制关键字和关键索引,这就大大地加快了查询速度。同时,二者也都提供支持XML的各种格式、也都能够在.NET或J2EE下运行正常,同样,都能够利用RAID(独立冗余磁盘阵列)

根本的区别:

  1. SQL服务器的狭隘的、保守的存储引擎而MySQL服务器的可扩展、开放的存储引擎;
  2. SQL服务器的引擎是Sybase,而MySQL能够提供更多种的选择,如MyISAM、Heap、InnoDB、Berkeley DB;
  3. MySQL不完全支持陌生的关键词,所以它比SQL服务器要少一些相关的数据库;
  4. MySQL也缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能;

性能方面

MySQL:

纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式MyISAM。MyISAM 数据库与磁盘非常地兼容而不占用过多的CPU和内存。MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。因为MySQL在内部里很多时候都使用64位的整数处理。Yahoo!商业网站就使用MySQL 作为后台数据库。

当提及软件的性能,SQL服务器的稳定性要比它的竞争对手强很多。但是,这些特性也要付出代价的。比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。如果你的硬件和软件不能充分支持SQL服务器,我建议你最好选择其他如DBMS数据库,因为这样你会得到更好的结果。

安全方面:

  1. MySQL和SqlServer都有字节完整的安全机制(缺省IP端口,也可以自己设置),只要遵守这些机制,一般是不会出问题的;
  2. MySQL有一个用于改变数据的二进制日志。因为它是二进制,这一日志能够快速地从主机上复制数据到客户机上。当服务崩溃时,二进制文件也会完整的保存;
  3. 在SQL服务器中,你也可以记录SQL的有关查询,但这需要付出很高的代价;
  4. 在恢复性方面,两款都做的很好。对于MySQL来说,主要体现在MyISAM的配置上。而SqlServer表现的就很稳健,SQL服务器能够时刻监测数据交换点并能够把数据库损坏的过程保存下来;

根据需求来选择

如果说这两种数据库那种更好,只能说要根据实际需求来选择数据库。

  1. 如果要建立一个.NET服务器体系,这一体系可以从多个不同平台访问数据,参与数据库的管理,那么你可以选用SQL服务器
  2. 如果要建立一个第三方站点,这一站点可以从一些客户端读取数据,那么MySQL将是最好的选择
  3. 如果需要海量数据,建议使用SqlServer,MySQL主要是短小精悍,容易上手,操作简单,免费供用的,在应对海量数据时没有SqlServer效果好
  4. 从成本角度考虑,MySQL肯定是第一选择,抛开5块钱的盗版SqlServer,这个数据库还是很贵的(SQL-Server 2000 是微软公司开发的中型数据库,它的可视化方面做得很好,在安全性等方面功能非常强大,并且有微软的强大技术支持,当然价格比较昂贵,适合应用于中型系统)

sql语句上的变形

数据定义、主键约束

Mysql定义数据库和主键:
	create database name; 创建数据库 
	use databasename; 选择数据库 
	drop database name 直接删除数据库
	CREATE TABLE --创建一个数据库表
	
	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)

MySQL删除:
	ALTER TABLE Persons DROP PRIMARY KEY
SQL Server删除:
	ALTER TABLE Persons DROP CONSTRAINT pk_PersonID

UNIQUE 约束

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证,每个表可以有多个unique,但只能有一个primary key。

MySQL添加:
CREATE TABLE Persons
(
	Id_P int NOT NULL,
	UNIQUE (Id_P)                 //写在最后
)
MySQL删除:
	ALTER TABLE Persons DROP INDEX  uc_PersonID

SQL Server添加:
CREATE TABLE Persons
(
	Id_P int NOT NULL UNIQUE,        //紧跟列后
)
SQL Server删除:
	ALTER TABLE Persons DROP CONSTRAINT uc_PersonID

CHECK 约束

CHECK 约束用于限制列中的值的范围,如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

My SQL添加:
CREATE TABLE Persons
(
	Id_P int NOT NULL,
	CHECK (Id_P>0)                       //写在最后
)
SQL Server 添加:
CREATE TABLE Persons
(
	Id_P int NOT NULL CHECK (Id_P>0),    //紧跟列后
)

MySQL / SQL Server添加多个:
CREATE TABLE Persons
(
	Id_P int NOT NULL,
	City varchar(255),
	CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes') //多个条件
)

MySQL / SQL Server对已有字段进行添加:
	ALTER TABLE Persons ADD CHECK (Id_P>0)

MySQL / SQL Server删除:
	ALTER  TABLE  Persons  DROP CONSTRAINT chk_Person

DEFAULT 约束

DEFAULT 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新纪录。

My SQL / SQL Server添加:
CREATE TABLE Persons
(
	Id_P int NOT NULL,
	City varchar(255) DEFAULT 'Sandnes'     //紧跟列后,默认值字符串Sandnes
)

通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:
CREATE TABLE Orders
(
	Id_O int NOT NULL,
	OrderDate date DEFAULT GETDATE()   //紧跟列后,函数
)


MySQL对已有表进行添加:
	ALTER  TABLE  Persons  ALTER  City  SET  DEFAULT  'SANDNES'
SQL Server对已有表进行添加:
	ALTER  TABLE  Persons  ALTER  COLUMN  City  SET  DEFAULT  'SANDNES'

MySQL删除:
	ALTER  TABLE  Persons  ALTER  City  DROP  DEFAULT

SQL Server删除:
	ALTER  TABLE  Persons  ALTER  COLUMN  City  DROP  DEFAULT

索引

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

Mysql和SqlServer在表上创建一个简单的索引(允许使用重复的值):
	CREATE INDEX index_name ON table_name (column_name) //"column_name" 规定需要索引的列。

Mysql和SqlServer在表上创建一个唯一的索引(两个行不能拥有相同的索引值):
	CREATE UNIQUE INDEX index_name ON table_name (column_name)

Mysql删除:
	ALTER TABLE table_name DROP INDEX index_name
SqlServer删除:
	DROP INDEX table_name.index_name

自增主键

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

mySql的主键自动增加是用auto_increment字段,默认地,AUTO_INCREMENT 的开始值是 1,每条新纪录递增 1
sqlServer的自动增加则是identity字段.
Auto-increment 会在新纪录插入表中时生成一个唯一的数字。
我们可以在表中创建一个 auto-increment 字段。
用于 MySQL 的语法

MySQL增加:
CREATE TABLE Persons
(
	P_Id int NOT NULL AUTO_INCREMENT,
	PRIMARY KEY (P_Id)
)
设置自增的起始值:
	ALTER TABLE Persons AUTO_INCREMENT=100
SqlServer增加:
CREATE TABLE Persons
(
	P_Id int PRIMARY KEY IDENTITY,或则是写成P_id int primary key identity (1,1),
)
要规定 "P_Id" 列以 20 起始且递增 10,请把 identity 改为 IDENTITY(20,10)


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

枚举enum

ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值,枚举最多可以有65,535个元素。

create table meijut (f1 enum('1','2','3','4','5','6'))
desc meijut

+-------+-------------------------------+------+-----+---------+-------+
| Field | Type                          | Null | Key | Default | Extra |
+-------+-------------------------------+------+-----+---------+-------+
| f1    | enum('1','2','3','4','5','6') | YES  |     | NULL    |       |
+-------+-------------------------------+------+-----+---------+-------+
insert into meijut values('5');

集合set

	create table jihe(f1 set('f','m'));
	insert into jihe values('f');

删表

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;              显示一个表的表结构
        Show create table tablename;         显示一个表的详细创建信息
        alter table t1 rename t2;        给表重命名
        alter table meijut add column f2 int default 0;				新增一列
        alter table meijut modify f2 text;					修改一列

数据的CRUD

limit和top

SQL Server: 
			select   top   8   *   from   table1 
MySQL: 
			select   *   from   table1   limit   5
			select * from table1 limit 0,5

ISNULL()函数

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

MySQL 可以使用 ISNULL() 函数
MySQL:
	select * from test where ifnull(no,0)=0;

语法定义

注释符区别

SqlServer:–和 /* */
MySql:–和/**/和#

识别符的区别

SqlServer识别符是[],[type]表示他区别于关键字
MySQL识别符是 `

存储过程

  1. MySql的存储过程中变量的定义去掉@
  2. MySql的declare只能用在begin end 的复合语句中,且只能是语句的开头。而SqlServer可以放在里面,也可以放在begin前
  3. MySql的Execute对应SqlServer的exec
  4. MySql存储过程调用其他存储过程用call
  5. SqlServer:select @a=count() from VW_Action MySQL为:select count() from VW_Action into @a
  6. MySql存储过程中没有return函数,在MySql中可以用循环和out参数代替
  7. MySql的out对应SQLServer的output,且mysql 的out要放在变量的前面,SQLServer的output放在变量后面
  • 19
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: MySQLSQL Server是两种不同的关系型数据库管理系统,它们的语法有一些区别: 1. 数据类型:MySQLSQL Server支持的数据类型有些不同,例如MySQL支持SET和ENUM类型,而SQL Server不支持。 2. 日期和时间函数:MySQLSQL Server的日期和时间函数有些不同,例如MySQL使用NOW()函数获取当前日期和时间,而SQL Server使用GETDATE()函数。 3. 字符串函数:MySQLSQL Server的字符串函数也有些不同,例如MySQL使用CONCAT()函数连接字符串,而SQL Server使用"+"运算符。 4. 存储过程和函数:MySQLSQL Server的存储过程和函数也有些不同,例如MySQL使用DELIMITER语句定义存储过程和函数的分隔符,而SQL Server使用BEGIN和END语句。 总之,MySQLSQL Server虽然都是关系型数据库管理系统,但它们的语法有一些不同,需要根据具体情况选择合适的语法。 ### 回答2: MySQLSQL Server是目前市场上最流行的两种关系型数据库管理系统,它们的语法虽然都是基于SQL(结构化查询语言),但是在具体实现上还是有一些区别的。 1. 数据类型:MySQLSQL Server支持的数据类型大部分是相同的,但是有一些细节上的差别,例如MySQL中的Text类型可以存储较大的文本数据,而SQL Server则需要使用NText类型。 2. 字符串的引号:在MySQL中,字符串需要使用单引号或者双引号括起来,而在SQL Server中只支持单引号。 3. 自增字段:MySQL中自增字段可以设置在任何位置,而SQL Server中需要将自增字段设置在字段声明语句的最后。 4. NULL值处理:MySQL中的NULL值和普通值视为不同的值,而SQL Server中NULL值则表示未知或者不应有值得情况。 5. LIMIT和TOP:在MySQL中用LIMIT取数据,而在SQL Server中使用TOP关键字。 6. 时间差计算:在MySQL中使用TIMESTAMPDIFF函数计算时间的差值,而在SQL Server中使用DATEDIFF函数。 综上所述,虽然两种数据库管理系统的语法都是基于SQL,但在具体实现上还是存在一些差异的,需要根据具体场景选择使用。 ### 回答3: MySQL(简称 MySQL)和 SQL Server(简称 MSSQL)是两种常见的数据库管理系统(DBMS)。虽然两者都是SQL(结构化查询语言)的实现,但它们之间有一些重要的语法区别。 1. 数据类型 MySQLSQL Server 支持许多常见和相似的数据类型,例如 INT 和VARCHAR。但是,两者之间还有一些重要的区别。例如,MySQL 中的 TEXT 列必须使用一个前缀: TINYTEXT、TEXT、MEDIUMTEXT 或 LONGTEXT。在 SQL Server 中,只有一种相应的类型:NTEXT。 2. 操作符 与数据类型一样,MySQLSQL Server 支持大多数常见的操作符,例如 =、<、> 和 BETWEEN。但是,其中一些操作符在语法方面存在不同。例如,在 MySQL 中,可以使用 MOD()函数来计算相除后的余数。在 SQL Server 中,可以使用 % 操作符来实现此功能。 3. 函数 MySQLSQL Server 都支持常见的数据库函数,例如 COUNT、SUM 和 AVG。但是,两者之间有一些重要的区别。例如,在 MySQL 中,可以使用 CONCAT()函数将文本字符串拼接起来。在 SQL Server 中,可以使用 “+” 来进行相同的操作。 4. 存储过程 存储过程是一个存储在数据库中的处理过程,可以被多次调用。MySQLSQL Server 都支持存储过程,但它们的语法和功能略有不同。在 MySQL 中,存储过程可以传递参数并返回值。SQL Server 中的存储过程可以使用 Transact-SQL 编写,并且支持事务处理、错误处理和游标。 总之,MySQLSQL Server的语法区别主要包括数据类型、操作符、函数和存储过程等方面,需要根据具体情况进行使用。同时,根据需要进行数据库选择是很重要的,因为不同的数据库适用于不同类型和规模的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值