浅谈两个关系型数据库 Oracle,Mysql

此处是一个学习了Oracle 数据库的IT狗,然后再学习Mysql,通过对比更好的学习。既然选择了这条路,便只顾风雨兼程!!!

学习了Oracle 11g,12c,两个版本。然后就是匆匆忙忙的秋招,我想说任何时候不要放弃最差的自己。上个周刚刚参加了OCP认证考试,052没过,可惜只有等到年后再考吧。昨天刚回到家里,然后就是一顿洗脑,父母对于计算机这一行其实并不看好,35岁以后怎么办?觉得女孩子应该找个稳定的工作,毕业就应该回到这里,安安稳稳的......... 我想说我不想再安安稳稳了。通过自己的努力,好好生活没什么不对,长大后的每一次决策,都是和父母的渐行渐远渐远,况且人在每一个阶段的都有应该做的事。那就加油吧!


下面就放图来比较这两个最常用的数据库了浅谈两个关系型数据库 Oracle,Mysql_第1张图片

说起这个去IOE,它是阿里巴巴提出来的。去掉IBM的小型机,Oracle 数据库,EMC存储设备,代之自己在开源软件基础上开发的系统。Mysql 也是这次的受益者,使用它得数量也变得多了起来。Oracle从业人员已经趋于稳定饱和状态,Mysql互联网公司大都在使用,而且Mysql不像oracle 那样成熟,需要大量的运维,所以DBA的需求也在加大,这对于我来说无疑是个好消息,也是我自学Mysql的原因动力。由于Mysql被Oracle 收购后,也推出了相应的商业版。

Mysql 的相关技能

以前一个thoughtworks 一个老师说过,如果你们不知道如何学习,不妨多在招聘网站看看,公司需要什么,按照要求学什么,这样具有目的性。

高可用 :为什么要用高可用?传统的主从复制 ;MHA

备份:备份原理  逻辑备份  物理备份   备份工具

监控:监控指示:LOAD/CPU/TPS/QPS/IOWAIT/CONN,ZABBIX监控系统

高性能: 深入理解体系结构,SQL 优化

浅谈两个关系型数据库 Oracle,Mysql_第2张图片

1.Oracle

oracle 能在所有主流平台上运行。完全支持所有的工业标准,采用完全开放策略,可以使客户端选择最合适的解决方案,Oracle 并行服务器通过使一组结点共享同一簇中的工作来扩展Windows NT的能力,提供高可用性和高伸缩性的簇的解决方案。如果Windows  NT 不能满足需要,用户可以把数据库移到UNIX 中。Oracle 的并行服务器对各种UNIX 平台集群有着相当高的集成度。Oracle 在兼容性、可移植性,可联结性、高生产效率,开放性也存在优点。Oracle 产品采用标准SQL ,并经过美国国家标准所测试。与IBM SQL/DS,DB2,INGRES,IDMS/R等兼容。

oracle 价格比较昂贵。据说一套正版的Oracle 软件早在2006年年底时候在市场上价格已经达到了6位数。所以如果项目不是那种超级大的项目,还是放弃oracle吧。


2.MySQL 

MySQL 不支持事务处理,没有视图,没有存储过程和触发器。没有数据库端的用户自定义的函数,不能完全使用标准的SQL语法。MySQL 缺乏transactions,rollbacks,subselect 的功能。如果计划维护一些随时需要线性递增的不同类的计数器,将缺乏transactions 功能。但在现有的发行版的MySQL 下,已经有了此功能。

MySQL没法处理复杂的关联性数据库功能,例如,子查询(subqueries),虽然大多数的子查询都可以改成join 另一个MySQL 没有提供支持的功能是事务处理以及事物的提交(commit)/撤销(rollback)。

当我们说MySQL 不支持外键时,指的是数据库的参考完整性限制-MySQL 并没有支持外键的规则,当然没有支持连锁删除的功能,简而言之,如果说你的工作量需要使用复杂的资料关联,还是用原来的Access吧。

在MySQL 中不会找到存储进程以及触发器。针对这些功能,在Accesses提供相对的事件进程。MySQL +php+apache 三者被软件开发者称为"php黄金三组合“。


Oracle 和MySQL的主要区别

客户端和命令窗口

Oracle:客户端和命令窗口,都是由用户决定内容-> conn user_name/password;

MySQL:都是由数据库决定内容->use database;

都可以创建多个数据库多用户,个人倾向于Oracle 一个数据库中多个用户的形式,MySQL多个数据库多个用户形式(最好每个数据库对应一个用户)

市场占有率及其他

Oracle 是大型数据库而MySQL 是中小型数据库,一个是开源,而一个价格非常高。

组函数用法规则

MySQL组函数在select 语句中可以随意使用。

Oracle:如果在查询语句中由组函数,那么其他列名必须是组函数处理过的,或者是group by 子句中的列,否则就会报错

自动增长的数据类型数据

MySQL由自动增长数据类型,插入数据记录时不用操作此字段,会自动获取数据值。

Oracle没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋值此字段

主键

MySQL一般使用自动增长类型,在创建表时只要指定表的主键为auto increment ,插入记录时,不需要再指定该记录的主键值,MySQL将自动增长;

Oracle没有自动增长类型,主键一般使用的序列,插入数据时将序列的下一个值赋值给该字段即可;

单引号处理

MySQL里可以用双引号包起字符串

Oracle只可以用单引号包起来字符串

长字符串的处理

长字符串的处理Oracle 也有它特殊的地方,INSERT 和UPDATE 时最大可操作的字符串长度小于4000个单字节,如果要插入更长的字符串,考虑使用CLOB类型,方法借用Oracle 里自带的DBMS_LOB 程序包。插入修改记录前一定要做好进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。

日期字段的处理

MySQL日期字段分为DATE和TIME两种,

oracle日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATA,精确到秒,或者用字符串转换成日期型函数

MySQL中插入当前时间几个函数是:NOW()函数,返回当前的日期时间,可以直接存到DATETIME 字段中。CURDATE()返回今天的日期,可以直接存到DATE 字段中。CURTIME()返回当前数据,可以直接存到TIME字段中,而Oracle 中当前时间是sysdate

空字符串处理

MySQL的非空字段也有空的内容

Oracle 里定义了非空字段就不容许有空的内容,按MySQL的NOT NULL 来定义Oracle 表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL 或者空字符,需要把它改成一个空格的字符串。

字符串的模糊比较

MySQL 里字段名like%字符串%;

Oracle里也可以用字段名like%字符串%但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,“字符串")>0 会得到更精确地查找结果。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(数据库)