- 一、MySQL
- 二、SQL Server
- 三、Oracle
- Oracle数据库的工作原理
- 四、DB2
- 五、Oracle与SQL Server的语法区别
- 1.数据类型不同。
- 2.创建备份表语法不同
- 3.修改存储过程
一、MySQL
MySQL的最初的核心思想,主要是开源、简便易用。其开发可追溯至1985年,而第一个内部发行版本诞生,已经是1995年。
MySQL的爆发实际是在01、02年,尤其是02年发布的4.0 Beta版,正式选定InnoDB作为默认引擎,对事务处理能力及数据缓存能力有了极大的提高。同年4.1版开始支持子查询,至此MySQL终于蜕变成一个成熟的关系型数据库系统。05年的5.0版本又添加了存储过程、服务端游标、触发器、查询优化以及分布式事务功能,但同年被Oracle抄了后路,InnoDB被Oracle收编。08年,MySQL被Sun收购,09年,Oracle收购了Sun和MySQL。由于MySQL的早期定位,其主要应用场景就是互联网开发。
架构:
最大的一个特色,就是自由选择存储引擎。每个表都是一个文件,都可以选择合适的存储引擎。常见的引擎有 InnoDB、 MyISAM、 NDBCluster等。但由于这种开放插件式的存储引擎,比如要求数据库与引擎之间的松耦合关系。从而导致文件的一致性大大降低。在SQL执行优化方面,也就有着一些不可避免的瓶颈。在多表关联、子查询优化、统计函数等方面是软肋,而且只支持极简单的HINT。
优点:
1,体积小、速度快、总体拥有成本低,开源;
2,支持多种操作系统;
3,是开源数据库,提供的接口支持多种语言连接操作 ;
4,MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的mysql能很容易充分利用CPU;
5,MySql有一个非常灵活而且安全的权限和口令系统。当客户与MySql服务器连接时,他们之间所有的口令传送被加密,而且MySql支持主机认证;
6,支持ODBC for Windows, 支持所有的ODBC 2.5函数和其他许多函数, 可以用Access连接MySql服务器, 使得应用被扩展;
7,支持大型的数据库, 可以方便地支持上千万条记录的数据库。作为一个开放源代码的数据库,可以针对不同的应用进行相应的修改;
8,拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性;
9,MySQL同时提供高度多样性,能够提供很多不同的使用者介面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言界面,例如C+,Perl,Java,PHP,以及Python。你可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。MySQL可用于Unix,Windows,以及OS/2等平台,因此它可以用在个人电脑或者是服务器上。
缺点:
1,不支持热备份;
2,MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变;
3,没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制;
4,MySQL的价格随平台和安装方式变化。Linux的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方案则必须付许可费。Unix或linux 自行安装 免费 、Unix或Linux 第三方安装 收费。
二、SQL Server
一提到SQL Server,大家一般都只想到Microsoft SQL Server,而非Sybase SQL Server。SQL Server最初是由Microsoft, Sybase and Ashton-Tate三家公司拦下的生意,是为IBM(又出现了)公司的OS/2操作系统开发的。随着OS/2项目的失败,大家也分道扬镳。 Microsoft自然转向自己的win操作系统,作为windows NT软件方案的一部分。而Sybase则专注于Linux/Unix方向的数据库开发。
MS SQL Server主要面向中小企业。其最大的优势就是在于集成了MS公司的各类产品及资源,提供了强大的可视化界面、高度集成的管理开发工具,在快速构建商业智能(BI)方面颇有建树。 MS SQL Server是MS公司在软件集成方案中的重要一环,也为WIN系统在企业级应用中的普及做出了很大贡献。
架构:
数据架构基本是纵向划分,分为:Protocol Layer(协议层), Relational Engine(关系引擎), Storage Engine(存储引擎), SQLOS。SQL执行过程就是逐层解析的过程,其中Relational Engine中的优化器,是基于成本的(CBO),其工作过程跟Oracle是非常相似的。在成本之上也是支持很丰富的HINT,包括:连接提示、查询提示、表提示。
优点:
1,易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等;
2,为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要。作为一个完备的数据库和数据分析包,SQLServer为快速开发新一代企业级商业应用程序、为企业赢得核心竞争优势打开了胜利之门。作为重要的基准测试可伸缩性和速度奖的记录保持者,SQLServer是一个具备完全Web支持的数据库产品,提供了对可扩展标记语言 (XML)的核心支持以及在Internet上和防火墙外进行查询的能力;
缺点:
1,开放性 :SQL Server 只能在Windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且Windows平台的可靠性,安全性和伸缩性是非常有限的。它不象Unix那样久经考验,尤其是在处理大数据量的关键业务时。
2,伸缩性并行性 :SQL server 并行实施和共存模型并不成熟,很难处理日益增多用户数和数据卷,伸缩性有限。
3,安全性:没有获得任何安全证书。
4,性能 :SQL Server 多用户时性能佳 。
5,客户端支持及应用模式: 客户端支持及应用模式。只支持C/S模式,SQL Server C/S结构只支持windows客户用ADO、DAO、OLEDB、ODBC连接。
6,操作性:操作简单,但只有图形界面。
7,使用风险:完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。
三、Oracle
Oracle:中文译作甲骨文,Oracle成立于1977年。
Oracle的应用,主要在传统行业的数据化业务中,比如:银行、金融这样的对可用性、健壮性、安全性、实时性要求极高的业务;零售、物流这样对海量数据存储分析要求很高的业务。此外,高新制造业如芯片厂也基本都离不开Oracle;电商也有很多使用者,如京东(正在投奔Oracle)、阿里巴巴(计划去Oracle化)。而且由于Oracle对复杂计算、统计分析的强大支持,在互联网数据分析、数据挖掘方面的应用也越来越多。
架构:
数据文件包括:控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件。这是根据文件功能行进行划分,并且所有文件都是二进制编码后的文件,对数据库算法效率有极大的提高。由于Oracle文件管理的统一性,就可以对SQL执行过程中的解析和优化,指定统一的标准:
RBO(基于规则的优化器)、CBO(基于成本的优化器)
通过优化器的选择,以及无敌的HINT规则,给与了SQL优化极大的自由,对CPU、内存、IO资源进行方方面面的优化。
优点:
1,开放性:Oracle能在所有主流平台上运行(包括Windows),完全支持所有的工业标准,采用完全开放策略,可以使客户选择最适合的解决方案,对开发商全力支持。
2,可伸缩性,并行性:Oracle的并行服务器通过使一组结点共享同一簇中的工作来扩展Window NT的能力,提供高可用性和高伸缩性的簇的解决方案。如果Windows NT不能满足需要,用户可以把数据库移到UNIX中。Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。
3,安全性:Oracle获得了最高认证级别的ISO标准认证。它提供多层安全性,包括用于评估风险、防止未授权的数据泄露、检测和报告数据库活动,以及通过数据驱动的安全性在数据库中实施数据访问控制的控制。
4,性能:Oracle几乎是性能最高的关系型数据库,保持开放平台下的TPC-D和TPC-C的世界记录。
5,客户端支持及应用模式:Oracle支持多层次网络计算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。
6,操作性:Oracle相对于其他RDBMS来讲较复杂,同时提供GUI和命令行,在WindowsNT和Unix下操作相同。
7,使用风险:Oracle具有相当长时间的开发经验,完全向下兼容。得到广泛的认可与应用,完全没有风险。
缺点:
1,对硬件的要求很高;
2,价格比较昂贵;
3,管理维护麻烦一些;
4,操作比较复杂,需要技术含量较高。
Oracle数据库的工作原理
1、在数据库服务器上启动Oracle实例。
2、应用程序在客户端的用户进程中运行,启用Oracle网络服务驱动器与服务器建立连接。
3、服务器运行Oracle网络服务驱动器,建立专用的服务器进程执行用户进程。
4、客户端提交事务。
5、服务器进程获取sql语句并检查共享池中是否有相似的sql语句,如果有,服务器进程再检查用户的访问权限;否则分配新的sql共享区分析并执行sql语句。
6、服务器从实际的数据文件或SGA中取得所需数据。
7、服务器进程在SGA中更新数据,进程DBWn在特定条件下将更新过的数据块写回磁盘,进程LGWR在重做日志文件中记录事务。
8、如果事务成功,服务器进程发送消息到应用程序中。
解释:
SGA(System Global Area):是Oracle Instance的 基本组成部分,在实例启动时分配。是一组包含一个Oracle实例的数据和控制信息的共享内存结构,主要作用是用于存储数据库信息的一个内存区域。
DBWn(Database Writer):Oracle数据库后台写入进程,是Oracle数据库实例中的一个进程。
LGWR(Log Writer):也是Oracle的后台进程之一,LGWR的作用是把日志缓存区的数据从内存写到磁盘的REDO文件里,完成数据库对象创建、更新数据等操作过程的记录。
四、DB2
优点:
1,开放性:能在所有主流平台上运行(包括Windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%。
2,可伸缩性,并行性:DB2具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境。
3,安全性:获得最高认证级别的ISO标准认证。
4,性能:适用于数据仓库和在线事物处理,性能较高。
5,客户端支持及应用模式:跨平台,多层结构,支持ODBC,JDBC等客户。
6,操作性:操作简单,同时提供GUI和命令行,在Windows NT和Unix下操作相同。
7,使用风险:在巨型企业得到广泛的应用,向下兼容性好。风险小。
五、Oracle与SQL Server的语法区别
1.数据类型不同。
–sql server 的数据类型:
Character 字符串:
char(n) : 字符串,固定长度的字符串,最多8000个字符。
varchar(n) : 可变长度的字符串,最多8000个字符。
varchar(max) :可变长度的字符串,最多1,073,741,824个字符。
text : 可变长度,最多2GB字符数据。
Unicode 字符串:
nchar(n) : 字符串,固定长度的字符串,最多4000个字符。
nvarchar(n) :可变长度的字符串,最多4000个字符。
nvarchar(max): 可变长度的字符串,最多536,870,912个字符。
ntext : 可变长度,最多2GB字符数据。
Binary 类型:
bit: 允许0,1,null。
image: 储存图片为二进制数据,最多2GB。
Number 类型:
thinyint: 从 0 到 255 的所有数字。
int: 整数型,允许从 -2,147,483,648 到 2,147,483,647 的所有数字。
smallint :允许从 -3276 到 3276 的所有数字。
bigint :允许从-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 之间所有数字。
decimal: (限制小数位数),储存精确数值。
float() :从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。 参数 n 指示该字段保存 4 字节还是 8 字节。
float(24) : 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。
money:介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。
rela :从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。
Date 类型:
datetime :从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。
datetime2 :·从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。
smalldatetime :从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。
date :仅存储日期,从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。
time:仅存储时间,精度为 100 纳秒。
timestamp :存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。
–oracle 的数据类型:
数字: NUMBER(8)/ NUMBER(10,2)/ NUMBER
– 整数位占8位/ 整数是8位、小数2位/ 默认是38位整数 (不超过位数)
日期: DATE
字符串:CHAR/CHAR(10)/VARCHAR2(10)/VARCHAR2(1 CHAR)
– 默认1个字符长度/字符长度不超过10位,少于10位默认后面补空格/字符长度不超过10位,少于10位不会补空格
大文本类型:CLOB,BLOB
2.创建备份表语法不同
如数据库中已有表 A ,要为其创建一个表结构与数据相同的备份表A_bak
Oracle: create table A_bak as select * from A ;
Sqlserver:select * into A_bak from A ;
3.修改存储过程
Oracle: create or replace produre A 直接执行
SqlServer:无replace语法,只能删除后重建 drop proc A ; create produre A
遇见问题会持续更新…