Oracle和MySQL的区别
来源:互联网 发布:淘宝唯美的刻字印章 编辑:程序博客网 时间:2024/06/06 02:03
简介:
1.Oracle是大型数据库,MySQL是中小型。
2.Oracle市场占有多,MySQL市场少。Oracle贵,MySQL不要钱(开源)。
3.Oracle支持大并发(多人同时使用)访问量也大,OLTP最好的工具(联机事务处理过程)。
4.Oracle安装很大好几G,MySQL不大只有几百M,Oracle非常占内存和性能。
使用:
1.M:offet,limit,O:rownum。
Oracle没有offet,limit,在mysql中我们用它们来控制显示的行数,最多的是分页了。oracle要分页的话,要换成rownum。
2.O序列增,M自动增。
oracle建表时,没有auto_increment,所有要想让表的一个字段自增,要自己添加序列,插入时,把序列的值,插入进去。
3.O:需要from dual,M:select 1。
oracle有一个dual表,当select后没有表时,加上的。不加会报错的。select 1 这个在mysql不会报错的,oracle下会。select 1 from dual这样的话,oracle就不会报错了。
4.O: null,not null,M:""就行。
对空值的判断,name != ""这样在mysql下不会报错的,但是oracle下会报错。在oracle下的要换成name is not null
group_concat这个函数,oracle是没有的,如果要想用自已写方法。
8.M权限差O很远,O200多种,还有角色管理。
mysql的用户权限管理,是放到mysql自动带的一个数据库mysql里面的,而oracle是用户权限是根着表空间走的。
9.Group by两个都有,用法不同。
group by,在下oracle下用group by的话,group by后面的字段必须在select后面出现,不然会报错的,而mysql却不会。
10.M引擎多,O好像不需要。
mysql存储引擎有好多,常用的mysiam,innodb等,而创建oracle表的时候,不需要这样的,好像只有一个存储引擎。
11.O无法改字段位置,M可以。
oracle字段无法选择位置,alter table add column before|after,这样会报错的,即使你用sql*plus这样的工具,也没法改字段的位置。
12.O字段类型没有M多。
oracle的表字段类型也没有mysql多,并且有很多不同,例如:mysql的int,float合成了oracle的number型等。
13.O中是没有substring这个函数的,M有的。
14.M主键是自动增长的类型,O没有自动增长类型,一般使用序列。(Oracle中的rownum与mysql的limit实现的功能相同,但没有mysql来的容易,它一般通过一个子查询来实现)
15.M空有空的内容,O空就必须是空。
16.模糊查询都是like,但是O的like不要用于索引,速度很慢。
区别:
1.并发:O行锁占有少,并发好,M更多表锁,并发差。
并发性是oltp数据库最重要的特性,但并发涉及到资源的获取、共享与锁定。mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。虽InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以oracle对并发性的支持要好很多。
2.一致:O操作提交查看,M一个读,其他不能改,有限制。
oracle支持serializable的隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session查询时,如果对应的数据块发生变化,oracle会在undo表空间中为这个session构造它查询时的旧的数据块。mysql没有类似oracle的构造多版本数据块的机制,只支持read commited的隔离级别。一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。session更新数据时,要加上排它锁,其他session无法访问数据。
3.事务:O早就支持,M在innodb引擎下才支持,还是有限制。
4.恢复:O提交的都日志恢复,M意外后可能丢失。
oracle保证提交的数据均可恢复,因为oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,如果出现数据库或主机异常重启,重启后oracle可以考联机在线日志恢复客户提交的数据。mysql默认提交sql语句,但如果更新过程中出现db或主机重启的问题,也许会丢失数据。
5.提交:O默认手动,MySQL默认自动。
6.备份:O备份不锁,MySQL备份锁。
oracle逻辑备份时不锁定数据,且备份的数据是一致的。mysql逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用
7.热备份:Oracle较成熟方便,一样不锁。
oracle有成熟的热备工具rman,热备时,不影响用户使用数据库。即使备份的数据库不一致,也可以在恢复时通过归档日志和联机重做日志进行一致的回复。mysql:myisam的引擎,用mysql自带的mysqlhostcopy热备时,需要给表加读锁,影响dml操作。innodb的引擎,它会备份innodb的表和索引,但是不会备份.frm文件。用ibbackup备份时,会有一个日志文件记录备份期间的数据变化,因此可以不用锁表,不影响其他用户使用数据库。但此工具是收费的。innobackup是结合ibbackup使用的一个脚本,他会协助对.frm文件的备份。
8.语句:MySQL较灵活,Oracle传统。
mysql对sql语句有很多非常实用而方便的扩展,比如limit功能,insert可以一次插入多行数据,select某些管理数据可以不加from。oracle在这方面感觉更加稳重传统一些。
9.复制:复制指复制库,O更好一些。
oracle:既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理较复杂。mysql:复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据。且需要手工切换丛库到主库。
10.工具:O多,M少。
oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等mysql的诊断调优方法较少,主要有慢查询日志。
11.安全:O就那样,M屎一样。
mysql的用户与主机有关,感觉没有什么意义,另外更容易被仿冒主机及ip有可乘之机。oracle的权限与安全概念比较传统,中规中矩。
12.分区:O很成熟,M基本为0。
oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。
mysql的分区表还不太成熟稳定。
13.拓展工具:O很多,M少。
oracle有多种成熟的命令行、图形界面、web管理工具,还有很多第三方的管理工具,管理极其方便高效。mysql管理工具较少,在linux下的管理工具的安装有时要安装额外的包(phpmyadmin, etc),有一定复杂性。
1.Oracle是大型数据库,MySQL是中小型。
2.Oracle市场占有多,MySQL市场少。Oracle贵,MySQL不要钱(开源)。
3.Oracle支持大并发(多人同时使用)访问量也大,OLTP最好的工具(联机事务处理过程)。
4.Oracle安装很大好几G,MySQL不大只有几百M,Oracle非常占内存和性能。
使用:
1.M:offet,limit,O:rownum。
Oracle没有offet,limit,在mysql中我们用它们来控制显示的行数,最多的是分页了。oracle要分页的话,要换成rownum。
2.O序列增,M自动增。
oracle建表时,没有auto_increment,所有要想让表的一个字段自增,要自己添加序列,插入时,把序列的值,插入进去。
3.O:需要from dual,M:select 1。
oracle有一个dual表,当select后没有表时,加上的。不加会报错的。select 1 这个在mysql不会报错的,oracle下会。select 1 from dual这样的话,oracle就不会报错了。
4.O: null,not null,M:""就行。
对空值的判断,name != ""这样在mysql下不会报错的,但是oracle下会报错。在oracle下的要换成name is not null
5.O:必须单引号,M:随意。
oracle下对单引号,双引号要求的很死,一般不准用双引号,用了会报ERROR at line 1:ORA-00904: "t": invalid identifier而MySQL要求就没有那么严格了,单引号,双引号都可以。
6.O有to_number,to_date,M没有。
oracle有to_number,to_date这样的转换函数,oracle表字段是number型的,如果你$_POST得到的参数是123456,入库的时候,你还要to_number来强制转换一下,不然后会被当成字符串来处理。而mysql却不会。
group_concat这个函数,oracle是没有的,如果要想用自已写方法。
8.M权限差O很远,O200多种,还有角色管理。
mysql的用户权限管理,是放到mysql自动带的一个数据库mysql里面的,而oracle是用户权限是根着表空间走的。
9.Group by两个都有,用法不同。
group by,在下oracle下用group by的话,group by后面的字段必须在select后面出现,不然会报错的,而mysql却不会。
10.M引擎多,O好像不需要。
mysql存储引擎有好多,常用的mysiam,innodb等,而创建oracle表的时候,不需要这样的,好像只有一个存储引擎。
11.O无法改字段位置,M可以。
oracle字段无法选择位置,alter table add column before|after,这样会报错的,即使你用sql*plus这样的工具,也没法改字段的位置。
12.O字段类型没有M多。
oracle的表字段类型也没有mysql多,并且有很多不同,例如:mysql的int,float合成了oracle的number型等。
13.O中是没有substring这个函数的,M有的。
14.M主键是自动增长的类型,O没有自动增长类型,一般使用序列。(Oracle中的rownum与mysql的limit实现的功能相同,但没有mysql来的容易,它一般通过一个子查询来实现)
15.M空有空的内容,O空就必须是空。
16.模糊查询都是like,但是O的like不要用于索引,速度很慢。
区别:
1.并发:O行锁占有少,并发好,M更多表锁,并发差。
并发性是oltp数据库最重要的特性,但并发涉及到资源的获取、共享与锁定。mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。虽InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以oracle对并发性的支持要好很多。
2.一致:O操作提交查看,M一个读,其他不能改,有限制。
oracle支持serializable的隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session查询时,如果对应的数据块发生变化,oracle会在undo表空间中为这个session构造它查询时的旧的数据块。mysql没有类似oracle的构造多版本数据块的机制,只支持read commited的隔离级别。一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。session更新数据时,要加上排它锁,其他session无法访问数据。
3.事务:O早就支持,M在innodb引擎下才支持,还是有限制。
4.恢复:O提交的都日志恢复,M意外后可能丢失。
oracle保证提交的数据均可恢复,因为oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,如果出现数据库或主机异常重启,重启后oracle可以考联机在线日志恢复客户提交的数据。mysql默认提交sql语句,但如果更新过程中出现db或主机重启的问题,也许会丢失数据。
5.提交:O默认手动,MySQL默认自动。
6.备份:O备份不锁,MySQL备份锁。
oracle逻辑备份时不锁定数据,且备份的数据是一致的。mysql逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用
7.热备份:Oracle较成熟方便,一样不锁。
oracle有成熟的热备工具rman,热备时,不影响用户使用数据库。即使备份的数据库不一致,也可以在恢复时通过归档日志和联机重做日志进行一致的回复。mysql:myisam的引擎,用mysql自带的mysqlhostcopy热备时,需要给表加读锁,影响dml操作。innodb的引擎,它会备份innodb的表和索引,但是不会备份.frm文件。用ibbackup备份时,会有一个日志文件记录备份期间的数据变化,因此可以不用锁表,不影响其他用户使用数据库。但此工具是收费的。innobackup是结合ibbackup使用的一个脚本,他会协助对.frm文件的备份。
8.语句:MySQL较灵活,Oracle传统。
mysql对sql语句有很多非常实用而方便的扩展,比如limit功能,insert可以一次插入多行数据,select某些管理数据可以不加from。oracle在这方面感觉更加稳重传统一些。
9.复制:复制指复制库,O更好一些。
oracle:既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理较复杂。mysql:复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据。且需要手工切换丛库到主库。
10.工具:O多,M少。
oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等mysql的诊断调优方法较少,主要有慢查询日志。
11.安全:O就那样,M屎一样。
mysql的用户与主机有关,感觉没有什么意义,另外更容易被仿冒主机及ip有可乘之机。oracle的权限与安全概念比较传统,中规中矩。
12.分区:O很成熟,M基本为0。
oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。
mysql的分区表还不太成熟稳定。
13.拓展工具:O很多,M少。
oracle有多种成熟的命令行、图形界面、web管理工具,还有很多第三方的管理工具,管理极其方便高效。mysql管理工具较少,在linux下的管理工具的安装有时要安装额外的包(phpmyadmin, etc),有一定复杂性。
0 0
- MYSQL和 ORACLE 的区别
- mysql和oracle的区别
- oracle和mysql的区别
- ORACLE和MYSQL的区别
- oracle 和 MySQL 的区别
- mysql和oracle的区别
- MySql和Oracle的区别
- mysql和oracle的区别
- Oracle和MySQL的区别
- MySql和Oracle的区别
- mysql和oracle的区别
- mysql和oracle的区别
- mysql和oracle的区别
- Oracle和MySQL的区别
- mysql和oracle的区别
- mysql和oracle的区别
- Oracle和Mysql的区别
- mysql和oracle的区别
- js ==与===区别
- Mac OS下用Qt Creator/Xcode打开CMake工程
- 回顾1949到现在的新闻信息,他们制作了多少虚假的信息和时代话题?
- 返回map形式json数据格式接口
- jQuery验证控件jquery.validate.js使用说明+中文API
- Oracle和MySQL的区别
- 培训机构都是骗人的?这样选择就对了!
- day44_jquery
- VS2010+Opencv-2.4.0的配置
- HTML 在画布中对图片,图片上另一个图层上的点,根据点绘制的路线进行缩放1
- 小白入坑
- rails 生产环境部署练习(nginx + passenger + capistrano)
- 同余与模运算
- WebSocket的事件触发机制