关于数据库:三种常用数据库区别

50次阅读

共计 4814 个字符,预计需要花费 13 分钟才能阅读完成。

Oracle
Oracle 能在所有支流平台上运行(包含 Windows)。齐全反对所有的工业规范。采纳齐全凋谢策略。能够使客户抉择最适宜的解决方案。对开发商全力支持,Oracle 并行服务器通过使一组结点共享同一簇中的工作来扩大 Windows NT 的能力,提供高可用性和高伸缩性的簇的解决方案。如果 Windows NT 不能满足需要,用户能够把数据库移到 UNIX 中。Oracle 的并行服务器对各种 UNIX 平台的集群机制都有着相当高的集成度。Oracle 取得最高认证级别的 ISO 规范认证.Oracle 性能最高,放弃开放平台下的 TPC- D 和 TPC- C 的世界记录 Oracle 多层次网络计 算,反对多种工业规范,能够用 ODBC、JDBC、OCI 等网络客户连贯。
Oracle 在兼容性、可移植性、可联结性、高生产率上、开放性也存在长处。Oracle 产品采纳规范 SQL,并通过美国国家标准技术所(NIST)测试。与 IBM SQL/DS,DB2,INGRES,IDMS/ R 等兼容。Oracle 的产品可运行于很宽范畴的硬件与操作系统平台上。能够装置在 70 种以上 不同的大、中、小型机上;可在 VMS、DOS、UNIX、WINDOWS 等多种操作系统下工作。能与多种通信网络相连,反对各种协定(TCP/IP、DECnet、LU6.2 等)。提供了多种开发工具,能极大的不便用户进行进一步的开发。Oracle 良好的兼容性、可移植性、可连接性和高生产率是 Oracle RDBMS 具备良好的开放性。
Oracle 价格是比拟低廉的。据说一套正版的 Oracle 软件早在 2006 年年底的时候在市场上的价格曾经达到了 6 位数。所以如果你的我的项目不是那种超级大的我的项目,还是放弃 Oracle 吧。
SQL Server
SQL Server 是 Microsoft 推出一套产品,它具备使用方便、可伸缩性好、与相干软件集成水平低等长处,逐步成为 Windows 平台下进行数据库利用开发较为理想的 抉择之一。SQLServer 是目前风行的数据库之一,它已广泛应用于金融、保险、电力、行政治理等与数据库无关的行业。而且,因为其易操作性及敌对的界 面, 博得了宽广用户的青眼, 尤其是 SQLServer 与其它数据库, 如 Access、FoxPro、Excel 等有良好的 ODBC 接口,能够把上述数据库 转成 SQLServer 的数据库, 因而目前越来越多的读者正在应用 SQLServer。
SQL Server 因为是微软的产品,又有着如此弱小的性能,所以他的影响力是几种数据库系统中比拟大,用户也是比拟多的。它个别是和同是微软产品的.net 平台一起搭配应用。当然其余的各种开发平台,都提供了与它相干的数据库连贯形式。因而,开发软件用 SQL Server 做数据库是一个正确的抉择。
MySQL
MySQL 不反对事务处理,没有视图,HP 页游没有存储过程和触发器,没有数据库端的用户自定义函数,不能齐全应用规范的 SQL 语法。
从数据库里手据说的第一件事就是 MySQL 不足 transactions,rollbacks,和 subselects 的性能。如果你打算应用 MySQL 写一个对于银行、会计的应用程序,或者打算保护一些随时须要线性递增的不同类的计数器,你将不足 transactions 性能。在现有的公布版本的 MySQL 下,请不要有任何的这些想法。(请留神,MySQL 的测试版 3.23.x 系列当初曾经反对 transactions 了)。
在十分必要的状况下,MySQL 的局限性能够通过一部分开发者的致力失去克服。在 MySQL 中你失去的次要性能是 subselect 语句,而这正是其它的所有数据库都具备的。换而言之,这个失去的性能是一个苦楚。
MySQL 没法解决简单的关联性数据库性能,例如,子查问(subqueries),尽管大多数的子查问都能够改写成 join 
另一个 MySQL 没有提供反对的性能是事务处理(transaction)以及事务的提交(commit)/ 撤销(rollback)。一个事务指的是被当作一个单位来独特执行的一群或一套命令。如果一个事务没法实现,那么整个事务外面没有一个指令是真正执行上来的。对于必须解决线上订单的商业网站来说,MySQL 没有反对这项性能,确实让人感觉很悲观。然而能够用 MaxSQL,一个离开的服务器,它能通过外挂的表格来反对事务性能。
外键(foreignkey)以及参考完整性限度(referentialintegrity)能够让你制订表格中材料间的束缚,而后将束缚(constraint)加到你所规定的材料外面。这些 MySQL 没有的性能示意一个有赖简单的材料关系的应用程序并不适宜应用 MySQL。当咱们说 MySQL 不反对外键时,咱们指的就是数据库的参考完整性限度 –MySQL 并没有反对外键的规定,当然更没有反对连锁删除(cascadingdelete)的性能。简短的说,如果你的工作须要应用简单的材料关联,那你还是用原来的 Access 吧。
你在 MySQL 中也不会找到存储过程(storedprocedure)以及触发器(trigger)。(针对这些性能,在 Access 提供了绝对的事件过程(eventprocedure)。
MySQL+php+apache 三者被软件开发者称为“php 黄金组合”。
Oracle 和 MySQL 的次要区别
Oracle: 客户端和命令窗口,都是由用户决定内容 -> conn user_name/password;
MySQL: 客户端和命令窗口,都是由数据库决定内容 -> use datebase;
都能够创立多数据库多用户,集体偏向于 Oracle 一个数据库中多个用户的模式,MySQL 多个数据库多个用户模式(最好每个数据库对应一个用户)
Oracle 是大型数据库而 MySQL 是中小型数据库,Oracle 市场占有率达 40%,MySQL 只有 20% 左右,同时 MySQL 是开源的而 Oracle 价格十分高。
Oracle 反对大并发,大访问量,是 OLTP(On-Line Transaction Processing 联机事务处理零碎)最好的工具。
装置所用的空间差异也是很大的,MySQL 装置完后才 152M 而 Oracle 有 3G 左右,且应用的时候 Oracle 占用特地大的内存空间和其余机器性能。
Oracle 也与 MySQL 操作上的一些区别
组函数用法规定
MySQL 中组函数在 select 语句中能够随便应用,但在 Oracle 中如果查问语句中有组函数,那其余列名必须是组函数解决过的,或者是 group by 子句中的列否则报错
eg:
select name,count(money) from user;这个放在 MySQL 中没有问题在 Oracle 中就有问题了。
主动增长的数据类型解决
MySQL 有主动增长的数据类型,插入记录时不必操作此字段,会主动取得数据值。Oracle 没有主动增长的数据类型,须要建设一个主动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。
CREATE SEQUENCE 序列号的名称(最好是表名 + 序列号标记)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按字段的长度来定,如果定义的主动增长的序列号 NUMBER(6),最大值为 999999
INSERT 语句插入这个字段值为:序列号的名称.NEXTVAL
单引号的解决
MySQL 里能够用双引号包起字符串,Oracle 里只能够用单引号包起字符串。在插入和批改字符串前必须做单引号的替换:把所有呈现的一个单引号替换成两个单引号。
翻页的 SQL 语句的解决
MySQL 解决翻页的 SQL 语句比较简单,用 LIMIT 开始地位,记录个数;PHP 里还能够用 SEEK 定位到后果集的地位。Oracle 解决翻页的 SQL 语句就比拟繁琐了。每个后果集只有一个 ROWNUM 字段表明它的地位,并且只能用 ROWNUM<100,不能用 ROWNUM>80。
以下是通过剖析后较好的两种 Oracle 翻页 SQL 语句 (ID 是惟一关键字的字段名):
语句一:
SELECT ID, [FIELD_NAME,…] FROM TABLE_NAME WHERE ID IN (SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 条件 1 ORDER BY 条件 2) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件 3;
语句二:
SELECT FROM ((SELECT ROWNUM AS NUMROW, c. from (SELECT [FIELD_NAME,…] FROM TABLE_NAME WHERE 条件 1 ORDER BY 条件 2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件 3;
长字符串的解决
长字符串的解决 Oracle 也有它非凡的中央。INSERT 和 UPDATE 时最大可操作的字符串长度小于等于 4000 个单字节,如果要插入更长的字符串,请思考字段用 CLOB 类型,办法借用 Oracle 里自带的 DBMS_LOB 程序包。插入批改记录前肯定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出正告,返回上次操作。
日期字段的解决
MySQL 日期字段分 DATE 和 TIME 两种,Oracle 日期字段只有 DATE,蕴含年月日时分秒信息,用以后数据库的零碎工夫为 SYSDATE,准确到秒,或者用字符串转换成日期型函数 TO_DATE(‘2001-08-01′,’YYYY-MM-DD’) 年 - 月 - 日 24 小时: 分钟: 秒的格局 YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种日期格局,能够参看 Oracle DOC.
日期型字段转换成字符串函数 TO_CHAR(‘2001-08-01′,’YYYY-MM-DD HH24:MI:SS’)
日期字段的数学运算公式有很大的不同。MySQL 找到离以后工夫 7 天用 DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)Oracle 找到离以后工夫 7 天用 DATE_FIELD_NAME >SYSDATE – 7;
MySQL 中插入以后工夫的几个函数是:NOW()函数以 `’YYYY-MM-DD HH:MM:SS’ 返回以后的日期工夫,能够间接存到 DATETIME 字段中。CURDATE()以 ’YYYY-MM-DD’ 的格局返回明天的日期,能够间接存到 DATE 字段中。CURTIME()以 ’HH:MM:SS’ 的格局返回以后的工夫,能够间接存到 TIME 字段中。例:insert into tablename (fieldname) values (now())
而 Oracle 中以后工夫是 sysdate
空字符的解决
MySQL 的非空字段也有空的内容,Oracle 里定义了非空字段就不容许有空的内容。按 MySQL 的 NOT NULL 来定义 Oracle 表构造,导数据的时候会产生谬误。因而导数据时要对空字符进行判断,如果为 NULL 或空字符,须要把它改成一个空格的字符串。
字符串的含糊比拟
MySQL 里用字段名 like%’ 字符串 %’,Oracle 里也能够用字段名 like%’ 字符串 %’ 但这种办法不能应用索引,速度不快,用字符串比拟函数 instr(字段名,’ 字符串 ’)>0 会失去更准确的查找后果。
程序和函数里,操作数据库的工作实现后请留神后果集和指针的开释。
主键
MySQL 个别应用主动增长类型,在创立表时只有指定表的主键为 auto increment, 插入记录时,不须要再指定该记录的主键值,MySQL 将主动增长;Oracle 没有主动增长类型,主键个别应用的序列,插入记录时将序列号的下一个值付给该字段即可;只是 ORM 框架是只有是 native 主键生成策略即可。
Oracle 实现了 ANSIISQL 中大部分性能,如,事务的隔离级别、流传个性等而 MySQL 在这方面还是比拟的弱

正文完
 0