数据库之间的差异.docx
《数据库之间的差异.docx》由会员分享,可在线阅读,更多相关《数据库之间的差异.docx(18页珍藏版)》请在冰豆网上搜索。
数据库之间的差异
Oracle、sqlServer、mySql三者的区别
一、性能差异
1、mySql和sqlServer是中型数据库,具有数据库的一切功能.事务,并发访问.锁.游标.函数库.存储过程.触发器.权限管理等一系列的高级工具.可以支持更高的并发访问量.大约在50万左右.
Oracle数据重量级的数据库了.算是一个比较完善的数据库管理系统.出了涵盖所有的数据库常用操作以外.oracle本省也内建了很多自己独有的东西.比如说字符型的varchar2等.
2、sqlserver和oracle
对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL和SQLServer。
这两者最基本的相似之处在于数据存储和属于查询系统。
你可以使用sql来访问这两种数据库的数据,因为它们都支持ansi-sql。
还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。
同时,二者也都提供支持xml的各种格式。
除了在显而易见的软件价格上的区别之外,这两个产品还有什么明显的区别吗?
在这二者之间你是如何选择的?
让我们看看这两个产品的主要的不同之处,包括发行费用,性能以及它们的安全性。
根本的区别是它们遵循的基本原则
二者所遵循的基本原则是它们的主要区别:
开放vs保守。
SQLServer服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。
虽然你可以使用SQLServer服务器的sybase引擎,但MySQL能够提供更多种的选择,如myisam,heap,innodb,andberkeleydb。
MySQL不完全支持陌生的关键词,所以它比SQLServer服务器要少一些相关的数据库。
同时,MySQL也缺乏一些存储程序的功能,比如myisam引擎联支持交换功能。
发行费用:
MySQL不全是免费,但很便宜
当提及发行的费用,这两个产品采用两种绝然不同的决策。
对于SQLServer服务器,获取一个免费的开发费用最常的方式是购买微软的office或者visualstudio的费用。
但是,如果你想用于商业产品的开发,你必须还要购买sqlserverstandardedition。
学校或非赢利的企业可以不考虑这一附加的费用。
性能:
先进的MySQL
纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式myisam。
myisam数据库与磁盘非常地兼容而不占用过多的cpu和内存。
MySQL可以运行于windows系统而不会发生冲突,在unix或类似unix系统上运行则更好。
你还可以通过使用64位处理器来获取额外的一些性能。
因为MySQL在内部里很多时候都使用64位的整数处理。
Yahoo!
商业网站就使用MySQL作为后台数据库。
当提及软件的性能,SQLServer服务器的稳定性要比它的竞争对手强很多。
但是,这些特性也要付出代价的。
比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。
如果你的硬件和软件不能充分支持SQLServer服务器,我建议你最好选择其他如dbms数据库,因为这样你会得到更好的结果。
安全功能
MySQL有一个用于改变数据的二进制日志。
因为它是二进制,这一日志能够快速地从主机上复制数据到客户机上。
即使服务器崩溃,这一二进制日志也会保持完整,而且复制的部分也不会受到损坏。
在SQLServer服务器中,你也可以记录SQLServer的有关查询,但这需要付出很高的代价。
安全性
这两个产品都有自己完整的安全机制。
只要你遵循这些安全机制,一般程序都不会出现什么问题。
这两者都使用缺省的ip端口,但是有时候很不幸,这些ip也会被一些黑客闯入。
当然,你也可以自己设置这些ip端口。
恢复性:
先进的sql服务器
恢复性也是MySQL的一个特点,这主要表现在myisam配置中。
这种方式有它固有的缺欠,如果你不慎损坏数据库,结果可能会导致所有的数据丢失。
然而,对于SQLServer服务器而言就表现得很稳键。
SQLServer服务器能够时刻监测数据交换点并能够把数据库损坏的过程保存下来。
根据需要决定你的选择
对于这两种数据库,如果非要让我说出到底哪一种更加出色,也许我会让你失望。
以我的观点,任一对你的工作有帮助的数据库都是很好的数据库,没有哪一个数据库是绝对的出色,也没有哪一个数据库是绝对的差劲。
我想要告诉你的是你应该多从你自己的需要出发,即你要完成什么样的任务?
而不要单纯地从软件的功能出发。
如果你想建立一个.net服务器体系,这一体系可以从多个不同平台访问数据,参与数据库的管理,那么你可以选用SQLServer服务器。
如果你想建立一个第三方站点,这一站点可以从一些客户端读取数据,那么MySQL将是最好的选择。
这两者数据库都能够在.net或j2ee下运行正常,同样,都能够利用raid。
===========================
ORACLE、SQLSERVER、MYSQL与DB2的比较
以下被引用:
ORACLE大型,完善,安全
SQLSERVER简单,界面友好,WINDOWS平台下的好选择
MYSQL免费,功能不错
DB2超大型,与ORACLE类似
以下被引用:
ORACLE大型,完善,安全
SQLSERVER简单,界面友好,WINDOWS平台下的好选择
MYSQL免费,功能不错
DB2超大型,与ORACLE类似
以下被引用:
oracle:
数据完整性,安全性要求较高的场合;
sqlserver(sybase和ms):
ms的sqlserver简单,好用,用于企业级的数据应用,性能没有问题,支持所有大型rdbms的特性;
mysql:
基本免费,适合个人网站及一些小企业的网站应用;
db2:
大型数据库,特长在于信息的存取。
以下被引用:
Oracle适用于较大型系统,但上手比较困难,即便上手后也很难提高。
需要有长期的实践和摸索,但确实比较适合大系统。
备份与恢复比较完善,但必需很有经验才能做的比较好。
数据量不超过1T,可以用它
SqlServer:
个人认为MS平台下最好用的数据库。
界面简单友好,操作方便,备份与恢复都比较容易学会。
而且学会SqlServer后与SYBASE也比较接近的。
MYSQL以前学PHP用的,感觉比较简单,无论是上手还是其本身的功能。
DB2我在AS/400上和MS平台都用过,感觉就是非常严谨,必须有非常规范的操作。
如果数据量超过百G,建议用它。
以下被引用:
oracle其实已经没有什么可以夸耀的了,看看他今年的业绩也就知道了。
他的技术现在就连微软都能实现了,从技术上看实在是没有什么理由值得采用
DB2的数据仓库还是相当出色,数据挖掘也很不错,特别是集群技术可以使DB2的可扩性能达到极致。
看看今年的业绩就知道DB2的优势了,当然它的价格比其他的略贵,不过还是可以接受,至少远远低于oracle的价格
Sybase已经快要消亡了,现在很少有新系统会采用这个东西了,反正我现在的公司已经放弃这个了
MySQL不错的东东,强烈推荐,但是用起来实在是另类,比如没有存储过程,如果不考虑集群,其实他的效率要远远高于oracle
SQLServer微软的东西,用起来感觉还不错,但是因为不能使用在UNIX上,所以企业,电信,政府都不是很愿意用。
如果不是做ERP最好不要用这个东西,否则产品可能会买不出去
sqlserver与oracle的区别
Oracle可在所有主流平台上运行。
SQLServer只能在Windows下运行
着信息技术的飞速发展,数据处理不仅在数量上要求越来越大,而且在质量上也要求越来越高。
Oracle数据库在大多数企业中受到广泛使用,而SQLServer数据库也因为和Windows的联系,在企业中的使用也是非常广泛。
操作系统的稳定对数据库来说是十分紧要的,在数据库可操作平台上,Oracle可在所有主流平台上运行,Oracle数据库采用开放的策略目标,它使得客户可以选择一种最适合他们特定需要的解决方案。
客户可以利用很多种第三方应用程序、工具。
对开发商来说是很大的支持。
而SQLServer却只能在Windows上运行了,这个就显得比较单调了,但SQLSever在Window平台上的表现,和Windows操作系统的整体结合程度,使用方便性,和Microsoft开发平台的整合性都比Oracle强的很多。
但Windows操作系统的稳定性及可靠性大家是有目共睹的,再说Microsoft公司的策略目标是将客户都锁定到Windows平台的环境当中,只有随着Windows性能的改善,SQLServer才能进一步提高。
从操作平台这点上Oracle是完全优胜于SQLServer的了。
从资料上可以看到,Oracle的安全认证获得最高认证级别的ISO标准认证,而SQLServer并没有获得什么安全认证。
这方面证明了Oracle的安全性是高于SQLServer的。
购买一个产品,首先考虑的当然是产品的性能了,当考虑性能的同时当然少不了究竟要花多少钱在这产品也是个很关键的问题。
要建立并运行一个数据库系统。
不仅仅包含最初购置软件、硬件的费用,还包含了培训及以后维护的费用。
Orcale数据库的价格是远比SQLServer数据库要高,为什么Oracle数据库比SQLServer数据库价格上要高出那么多,一方面Oracle的初始花费相对较高,特别是在考虑工具软件的时候,Oracle很多工具软件需要另外购买,与Microsoft提供免费的SQLServer工具软件相比,Oracle更显价格的不菲。
但由于SQLServer只能在Windows下运行的原因,普遍认为SQLServer数据库的可靠性是比较差的。
Oracle的性能优势体现在他的多用户上,而SQLServer的性能优势在多用户上就显得力不从心了。
操作上SQLServer明显要比Orcale简单,如果你用过Java和DOTNET的开发平台,区别的基本就是Oracle和SQLServer不同,Oracle的界面基本是基于Java的,大部分的工具是Dos界面的,甚至SQLPlus也是,SQLServer是跟VB一样,全图形界面,很少见到DOS窗口。
SQLServer中的企业管理器给用户提供一个全图形界面的集成管理控制台来集中管理多个服务器。
Oracle也有自己的企业管理器,而且它的性能在某些方面甚至超过了SQLServer的企业管理器,但它安装较为困难。
Orcale数据库和SQLServer数据库那个更快?
其实是一个很难答的问题,因为存在许多不定因素,包括处理类型、数据分布以及硬件基础设施等。
SQLServer2000是一个具备完全Web支持的数据库产品,提供了可扩展标记语言核心支持以及Internet上和防火墙外进行查询的能力,具有可伸缩性、灵活性、扩充性好,而且价格便宜等特点,而Oracle则有着可靠安全性,速度比SQLServer快上百倍,但其价格在实施中却比SQLServer它高出了几百倍。
其实各行业考虑选择那种数据库,是由数据库的特点以及根据自己的业务需求和基础设施综合考虑来决定的。
oracle中有复合数据类型sqlserver中没有
声明方式:
变量名对象名%type
这里的变量类型可以是所有以存在的数据类型,具有依赖性,存储过程中用这种变量比较灵活,但效率应该会低些
oracle存储过程中借助cursor类型变量返回并访问记录集sqlserver中我没用过类似功能
oracle里这么用:
存储过程中边查询边给变量赋值
select某一列名into变量名fromtablewhere..;
相当于oracle中的select变量名=列....
二、各数据库的sql语句差别
1.取前几条数据
MySQL语法
SELECT*FROMPersonsLIMIT5
Oracle语法
SELECT*FROMPersonsWHEREROWNUM<=5
SQLServer的语法
SELECTTOP2*FROMPersons
SELECTTOP50PERCENT*FROMPersons
2.MySQL建表约束
CREATETABLEPersons
(
Id_PintNOTNULL,
LastNamevarchar(255)NOTNULL,
FirstNamevarchar(255),
Addressvarchar(255),
Cityvarchar(255),
UNIQUE(Id_P)
)
SQLServer/Oracle/MSAccess建表约束
CREATETABLEPersons
(
Id_PintNOTNULLUNIQUE,
LastNamevarchar(255)NOTNULL,
FirstNamevarchar(255),
Addressvarchar(255),
Cityvarchar(255)
)
如果需要命名UNIQUE约束,以及为多个列定义UNIQUE约束,请使用下面的SQL语法:
MySQL/SQLServer/Oracle/MSAccess:
CREATETABLEPersons
(
Id_PintNOTNULL,
LastNamevarchar(255)NOTNULL,
FirstNamevarchar(255),
Addressvarchar(255),
Cityvarchar(255),
CONSTRAINTuc_PersonIDUNIQUE(Id_P,LastName)
)
3.撤销UNIQUE约束
MySQL:
ALTERTABLEPersons
DROPINDEXuc_PersonID
SQLServer/Oracle/MSAccess:
ALTERTABLEPersons
DROPCONSTRAINTuc_PersonID
4.SQLPRIMARYKEY约束
MySQL:
CREATETABLEPersons
(
Id_PintNOTNULL,
LastNamevarchar(255)NOTNULL,
FirstNamevarchar(255),
Addressvarchar(255),
Cityvarchar(255),
PRIMARYKEY(Id_P)
)
SQLServer/Oracle/MSAccess:
CREATETABLEPersons
(
Id_PintNOTNULLPRIMARYKEY,
LastNamevarchar(255)NOTNULL,
FirstNamevarchar(255),
Addressvarchar(255),
Cityvarchar(255)
)
如果需要命名PRIMARYKEY约束,以及为多个列定义PRIMARYKEY约束,请使用下面的SQL语法:
MySQL/SQLServer/Oracle/MSAccess:
CREATETABLEPersons
(
Id_PintNOTNULL,
LastNamevarchar(255)NOTNULL,
FirstNamevarchar(255),
Addressvarchar(255),
Cityvarchar(255),
CONSTRAINTuc_PersonIDPRIMARYKEY(Id_P,LastName)
)
SQLPRIMARYKEYConstraintonALTERTABLE
如果在表已存在的情况下为"Id_P"列创建PRIMARYKEY约束,请使用下面的SQL:
MySQL/SQLServer/Oracle/MSAccess:
ALTERTABLEPersons
ADDPRIMARYKEY(Id_P)
如果需要命名PRIMARYKEY约束,以及为多个列定义PRIMARYKEY约束,请使用下面的SQL语法:
MySQL/SQLServer/Oracle/MSAccess:
ALTERTABLEPersons
ADDCONSTRAINTpk_PersonIDPRIMARYKEY(Id_P,LastName)
5.撤销PRIMARYKEY约束
如需撤销PRIMARYKEY约束,请使用下面的SQL:
MySQL:
ALTERTABLEPersons
DROPPRIMARYKEY
SQLServer/Oracle/MSAccess:
ALTERTABLEPersons
DROPCONSTRAINTpk_PersonID
6.SQLFOREIGNKEYConstraintonCREATETABLE
下面的SQL在"Orders"表创建时为"Id_P"列创建FOREIGNKEY:
MySQL:
CREATETABLEOrders
(
O_IdintNOTNULL,
OrderNointNOTNULL,
Id_Pint,
PRIMARYKEY(O_Id),
FOREIGNKEY(Id_P)REFERENCESPersons(Id_P)
)
SQLServer/Oracle/MSAccess:
CREATETABLEOrders
(
O_IdintNOTNULLPRIMARYKEY,
OrderNointNOTNULL,
Id_PintFOREIGNKEYREFERENCESPersons(Id_P)
)
7.如果需要命名FOREIGNKEY约束,以及为多个列定义FOREIGNKEY约束,请使用下面的SQL语法:
MySQL/SQLServer/Oracle/MSAccess:
CREATETABLEOrders
(
O_IdintNOTNULL,
OrderNointNOTNULL,
Id_Pint,
PRIMARYKEY(O_Id),
CONSTRAINTfk_PerOrdersFOREIGNKEY(Id_P)
REFERENCESPersons(Id_P)
)
8.SQLFOREIGNKEYConstraintonALTERTABLE
如果在"Orders"表已存在的情况下为"Id_P"列创建FOREIGNKEY约束,请使用下面的SQL:
MySQL/SQLServer/Oracle/MSAccess:
ALTERTABLEOrders
ADDFOREIGNKEY(Id_P)
REFERENCESPersons(Id_P)
如果需要命名FOREIGNKEY约束,以及为多个列定义FOREIGNKEY约束,请使用下面的SQL语法:
MySQL/SQLServer/Oracle/MSAccess:
ALTERTABLEOrders
ADDCONSTRAINTfk_PerOrders
FOREIGNKEY(Id_P)
REFERENCESPersons(Id_P)
撤销FOREIGNKEY约束
如需撤销FOREIGNKEY约束,请使用下面的SQL:
MySQL:
ALTERTABLEOrders
DROPFOREIGNKEYfk_PerOrders
SQLServer/Oracle/MSAccess:
ALTERTABLEOrders
DROPCONSTRAINTfk_PerOrders
9.Togetthecurrentdateandtime:
程序代码
MicrosoftSQLServer
SelectGETDATE()
GO
MySQL[retrievingthedatebutnottime]
SelectCURDATE();
MySQL[retrievingdateandtime]
SelectNOW();
oracle
SelectSYSDATE FROMdual;
PostgreSQL
SelectCURRENT_DATE;
Notethatforallofthesefunctioncalls,nopassedparametersareneeded.
10.Thesenextexamplesshowhowtofindoutwhatdayagivendatefallson:
(Sunday)
程序代码
MicrosoftSQLServer
SelectDATEPART(dw,GETDATE())
GO
MySQL
SelectDAYNAME(CURDATE());
oracle
SelectTO_CHAR(SYSDATE,'Day')
FROMdual;
PostgreSQL
SelectDATE_PART('dow',date'now');
11.Todeterminehowfarawayadateisfromthecurrentdate(oranyotherdateforthatmatter),eitherinthefutureorinthepast,usetheseexamples
程序代码
MicrosoftSQLServer
SelectDATEDIFF(dd,'1/1/01',GETDATE())
GO
MySQL
SelectFROM_DAYS(TO_DAYS(CURDATE())-
TO_DAYS('2001-11-25'));
oracle
SelectTO_DATE('25-Nov-2000','dd-mon-yyyy')-
TO_DATE('25-Aug-1969','dd-mon-yyyy')
FROMdual;
PostgreSQL
SelectAGE(CURRENT_DATE,'25-Aug-1969');
12.Itiscommonproceduretoretrieveadateina