oracle与mysql的区别
/news1/programming/2008/218/08218937442EA73C7DBK6JCH28I J3G.html(oracle数据库基本操作教程)/Dev/DB/(数据库学习网站)/search_article.shtml?wo=mysql+oracle+%C7%F8%B1%F0(文章咨询)将Mysql、PostgreSQL二个开源数据库和Oracle放在一起对比,多少显得有些不公平,后者是有强大厂商及上千技术人员支持和维护的商用数据库,而前者是开源和免费的产品。
但是,这种对比,有助于我们在架构自己的业务和应用时,做出理性的选择。
随着现代数据库可用特征集的迅速增加,很难区分孰好孰坏。
例如Oracle里就有许多你可能从来都不需要的高级数据仓库特征。
此外也可能有一些其它不可或缺的特征比如ACID事务特性。
我们来看一看主要的一些特征,比如存储过程,视图,快照,表数据类型和事务等等。
同时我们分析一下Postgresql,MySQL和Oracle这几个数据库,然后找出哪个能够满足你的需求。
存储过程数据库里的存储应用程序肯定会有它的拥护者和贬低者。
在这个问题上我还不清楚自己属于哪一类,所以我尽量对这两个方面都讨论。
当你开始在数据库里放置应用程序代码时,你就处于了彻底不可移植的境地。
你把应用程序移植到另一个数据库时,那段代码将不得不被重写。
但是它对原来数据库的高度专一性意味着它可以利用那个引擎,和那个引擎紧紧捆绑在一起。
有时候数据库里的存储代码要明显快得多。
在对数据做了修改之后,你不得不更新一百万行的某些数据块。
在存储过程里,数据的读入、操纵和更新是一步完成的。
然而你要在中间层应用程序中做同样事情的话,你就不得不通过网络发送数据集,完成数据操纵,然后将它发送回来。
这不但使任务的速度变慢,而且竞争同一数据的其他事务有可能不得不等待,因为它需要的数据正处于传送和操纵状态。
存储代码也可以用来密封特定的请求,这对简化你整体的应用程序是很重要的。
这三个数据库都支持存储过程和函数。
Oracle还支持包,或者说是存储过程的集合以及几乎没有人用过的各种面向对象特征的集合。
还要说明一点,一个数据库引擎实际上是在存储代码和嵌入在里面的SQL代码之间关联转换。
Oracle 9i版本引入了成批绑定技术,所以你能够对许多行进行处理,并且能够一次性更新它们,而不是单个循环迭代。
这个特征大幅度改善了性能。
视图视图基本上是存储查询,正因为如此执行起来才不会过度复杂。
然而当用于查询时,他们必然会使查询复杂化。
所以很明显,数据库在视图可用之前一定要支持子查询。
Oracle 很早就已经有视图了。
从5.0版本开始,MySQL也已经支持视图。
跟Oracle一样,MySQL 也支持UPDATEABLE视图,但是有一些限制。
Postgres也支持视图和UPDATEABLE视图。
更详细的解释见Complex SQL部分。
物化图(快照)不用说,Oracle对它们支持得非常好。
作为一种新事物,物化图(我更喜欢快照这个可视化的术语,有点离题了)是一个周期性更新的副本或者是表的子集。
可以把视图看做是查询的一个副本。
直到下一次刷新,那个副本是静态的,没从主机那儿更新的。
通常要在更新频率和支持它的事务日志(比如索引)的维护之间做一个折衷。
名义上,MySQL和Postgresql不支持物化图,然而互联网上有它的实现,可能会满足你的需求,你要是选择此方案的话就另外需要一些支持了。
一个存储程序创建物化图,另一个存储过程刷新它。
在本质上,一个CREATE TABLE语句就是AS SELECT..的拷贝。
语言集成如今,基于web的编程应用虽然使用了不同的数据库,却是完全平等的。
几乎所有的web编程语言都支持这些数据库类型。
Java,PHP,Perl,Python,C#/.NET,等等等等。
尽情享受编程的乐趣吧!触发器MySQL,Oracle和Postgres都支持INSERT,UPDATE和DELETE操作的BEFORE 和AFTER事件触发器。
就我个人而言,除非万不得已我不会使用触发器。
因为他们常常被忘记,有时反而给你添乱。
少量使用的话,效果反而会很好。
安全性所有这三个数据库都有它的脆弱性。
软件肯定有一些死角故障隐藏其中,这是它的本性。
此外,这三个数据库都会定期发布更新包。
然而我个人的感觉是,开源意味着必然有更多的目光,并且经常更多的是挑剔的目光盯在程序上面。
而且在开源世界里社区施加的压力要大得多。
在商界,当修理费用远远高于等待补丁的费用时,厂家可以并且经常会耍手段。
Oracle允许你通过审核跟踪设施对表和文件启用审计功能。
一旦启用,你可以审计插入,更新或者删除一个特定的表,还可以注册,甚至是某一特定用户对数据库全部的访问。
你有相当多的选择权,并且启用很容易。
Postgresql也有这个函数,据说跟Oracle的同样灵活、易于配置。
另一方面,MySQL的核心函数中好像不提供这个函数,你当然可以构建自己的存储过程和触发器来做你想做的事情,并把相应的信息填入一张表中,只是相对麻烦一些。
在数据库内部的安全性方面,所有这三个数据库都支持口令登录和数据库内部各种类型的加密。
Oracle确有一种新特征叫做虚拟专用数据库,其中表的段和列都可以被编码,对于视图是隐藏的。
这对于一些有争议的或是敏感的数据非常有用,DBA和其他管理员对这些数据是无权访问的。
结论很明显,这三个数据库平台都有大量的特征,对于同一问题也有不同的解决方案。
就安全性,触发器,视图,物化图和存储过程而言,他们提供了许多一样的功能,尽管在性能和配置方面有些差异。
在第二部分,我们将讨论数据库真正开始千差万别的一些方式,从索引方面,可能最重要的是从它们的优化引擎方面。
在前面对数据库的比较中,我们提到了几种不同的特征,比如触发器,视图和存储过程。
虽然在Oracle,Postgresql和MySQL中这几个特征集彼此之间有所不同,但是你遇到的大部分应用都是集中在这几个方面。
这一次,我们将讨论这几个平台之间存在明显差异的一些东西,最重要在于它们处理SQL复合语句和优化选择的方式上。
SQL复合语句(优化引擎)不管你选择哪个数据库,SQL语言都是你和数据库交互的最基本和最重要的方式。
这也正是这三个平台开始分道扬镳的地方。
Oracle支持大量复杂的查询,几乎是无限多的表和所有类型的联结以及组合。
但这些充其量只是冰山一角,Oracle真正的王牌在于它的Cost Based Optimizer(基于代价的优化器),它分析SQL语句,如果可能的话会重写和简化它,基于代价选择索引,根据驱动表和其他一些神秘的方式来做出决定。
读一下MySQL的文档你就会发现性能偏见的来源,这些是厂家细节类型,它使得性能优化和性能调节在任何平台上都很复杂。
MySQL能够处理的任何JOIN或者VIEW语句的固定最大值是61张表。
我个人又有点疑问,不管怎么说,应用程序中表太多了处理起来会更困难,所以正如前面所说,确实是优化器而不是能够查询的最大表规格占上风,等等。
Postgresql 8.x版支持所有的SQL92规范,几乎没有什么限制。
我再次认为,一种数据库优于其他数据库在于优化程序方面做得好。
复合查询很麻烦,所以查询策略就成了你分析性能瓶颈的最好参考。
索引类型索引技术对数据库性能来说是很关键的,Oracle在这方面提供了很多的选择。
目前存在着太多的索引类型,从标准的B树到反向键,再到基于函数的时常误用的位图索引,甚至index-only表。
作为附加技术,DBA还可以使用Oracle Text,它提供了索引能够让你查找CLOB(大字符对象),而且Oracle Spatial提供了基于位置数据的索引。
在MySQL里,我们发现有B树,哈希表,全文和GIS索引(基于位置数据),还有簇索引,但是如果我在Oracle方面的经验有任何指导作用的话,我可以说这些跟大多数应用程序都是不相关的。
大部分时候,B树索引是我在Oracle,MySQL和Postgres应用中能看到的唯一一种索引。
除此之外,就算作为示例,基于函数的索引在MySQL中也是没有的,但是它们能够靠创建另一列使用那个函数和一些数据来模拟,然后再增加一个触发器使它更受欢迎。
Postgresql提供了B树和哈希表,以及r树和它自己个性化的GiST索引类型,它允许创建用户自定义类型和基于函数的索引。
Oracle也提供了一种类似的函数,其中它的基于函数的索引能够用于基于pl/sql的函数,而不仅仅是标准的系统预定义函数,例如那些你可能不会用到的trunc,UPPER函数。
但是你要小心了,这样的索引很可能访问速度极慢,当它从你的表中输入输出数据的时候,速度慢得你甚至都可以放慢语速加入讨论了。
再次强调一下,Oracle真正胜出的地方就在于它的实现方式和优化器选择索引的策略上。
mysql:4.0开始支持外键;4.1开始支持子查询5.0支持存储过程和触发器真是汗阿。
ZackUrlocker在北京召开的一个小型记者会上表示:软件产业正在经历的革命绝非从单一产品向整体解决方案的转变,而是基于互联网的软件应用服务的兴起。
同时,ZackUrlocker表示:即将发布的mysql5.1将增加对XML的支持。
ZackUrlocker完全同意“Oracle是波音747,MySQL是丰田汽车”这个说法,“但要知道,丰田汽车可比波音747多得太多; 很多人都可以购买一辆丰田汽车,但绝大多数的人不需要买一架波音747。
”Web应用起飞? ZackUrlocker认为,MySQL最大的优势,便是基于网络的在线应用服务,表明公司的业务模式顺应了软件产业的变革趋势。
美国市场调研机构comScoreNetworks提供的报告显示,2007年1月,全球15岁及以上使用互联网的人数达到了7.47亿; 而据诺基亚日前预言,2007年年底前全球手机用户总数将达到30亿,到2010年将进一步增至40亿。
“假如把手机也看成是网络的终端,那么,未来的软件应用一定是基于Web的。
”开放源代码和软件在线服务是推动软件产业变革的两股重要力量。
提供在线客户关系治理(CRM)服务; 此外,两周前RedHat发布的RedHatExchange(红帽交换计划),联合了众多开放源代码的商业智能、数据库、文件治理、ERP、CRM以及系统监测软件供给商,共同推动开放源代码和在线服务的发展。
据Gartner 称,基于Web的软件在企业软件中的比例将由2005年的5%提高到2011年的25%。
潜力中国去年,MySQL通过与万里开源公司合作的方式进入中国市场,并很快成立了中国研发中心和中国培训中心。
ZackUrlocker对CNET说,MySQL把中国市场看成“潜力巨大”的市场,目前MySQL的目标和任务主要是树立形象、站稳脚跟、培训人才。
数据库管理系统比较MySQLvsOraclevsSQLServer
数据库管理系统比较MySQLvsOraclevsSQLServer 数据库管理系统比较:MySQL vs Oracle vs SQL Server引言:数据库管理系统是现代信息技术领域中不可或缺的一环。
随着数据量的急剧增加和数据库应用的广泛应用,选择适合自己需求的数据库管理系统变得至关重要。
在本文中,我们将比较三种常见的数据库管理系统:MySQL、Oracle和SQL Server。
通过对比它们的性能、功能、可扩展性和使用成本,为读者提供一个更好地了解和选择的依据。
一、性能比较在数据库管理系统中,性能是一个至关重要的因素。
下面将对MySQL、Oracle和SQL Server的性能进行比较。
1.1 MySQL性能MySQL是一个轻量级的开源数据库管理系统,以其高性能而闻名。
它采用多线程处理机制和高效的索引算法,能够处理大规模的数据访问和高并发请求。
此外,MySQL还支持垂直和水平扩展,可根据实际需求进行灵活配置和调整。
因此,在对于大多数中小型应用来说,MySQL提供了相对较好的性能。
1.2 Oracle性能Oracle是一个功能强大且成熟的商业数据库管理系统。
它具有出色的性能,并且能够处理大规模的复杂数据模型。
Oracle采用了先进的事务处理机制和高效的查询优化算法,使其在处理高并发访问和复杂查询时具有出色的性能表现。
然而,Oracle的性能和功能也伴随着更高的硬件要求和许可成本。
1.3 SQL Server性能SQL Server是由微软公司开发的关系型数据库管理系统。
它在处理大规模数据时表现出色,并且支持高并发访问和复杂查询。
SQL Server 采用了先进的内存管理和缓存技术,以提高查询速度和响应时间。
此外,SQL Server还具有良好的稳定性和可靠性,适用于中小型企业的应用场景。
综合比较,MySQL适用于中小型应用,对性能要求较高且成本敏感的场景;Oracle适用于大规模企业级应用,对功能和可靠性要求较高的场景;SQL Server适用于中小型企业应用,对性能和稳定性要求较高的场景。
oracle建表与mysql建表的一些区别
oracle建表与mysql建表的一些区别
oracle建表与mysql建表的一些区别
1、oracle没有bit类型,修改为varchar2(1)或者char(1)
2、oracle没有datetime类型,修改为date类型
3、view是oracle的关键字不能用来做表明
4、int类型修改为number
5、mysql可以实现自增列,只要在建表时设置auto_increment 即可,而oracle在建表时不能设置自增序列功能,必须通过sequence序列来实现自增列的功能
6、整个数据库中,mysql的索引是可以重名的,mysql索引是表级别的,但是oracle索引是不可以重名的,它的索引是数据库级别的(mysql的索引是从0开始的,oracle数据库索引是从1开始的)
7、oracle创建一个数据库相当于创建一个实例。
一个oracle可以创建很多个实例。
在实例中创建表的空间,把表空间指向数据文件。
创建用户,用户指向使用的表空间。
这个创建用户的过程就相当于mysql的creat database。
Mysql与Oracle的50个区别
Mysql与Oracle的50个区别1. 有些人说Oracle没有限制,实际上他们说得可能是Oracle不支持LIMIT语法.不过可以rownum虚列来实现,不过会更加麻烦.2. Oracle不支持偏移(offset)语法.3. Oracle的复制功能可能比MySQL更加健壮,不过也更加难以配置.4. 对于多个Master类型的系统,大部分用户都希望你使用更加复杂也更加昂贵的Oracle RAC(虽然可能NDB更加健壮).5. Oracle的分区功能非常健壮,但是它不是内置的,并需要专门为此付费(分区功能是在Enterprise Edition里面是内置的).6. 在Linux/Unix上,Oracle并不象Mysql那么方便,很多Linux/Unix发行版默认就会自带Mysql.(我对这一点的理解与翻译可能都有偏差)7. INSERT … ON DUPLICATE KEY U PDATE语法将不再可用,不过你需要学习更加复杂(但是符合SQL标准)的MERGE语法.8. Oracle的ROLE架构与MySQL有很大差异,无法再使用root角色来完整所有工作.(不过Sys用户的权限仍然与root相差无几,只是为了安全着想,不建议这么使用了).9. Role 帐户与特定的Schema联系在一起(反之也一样),类似于MySQL数据库中的Database概念.(Role并不完全与Schema联系在一起,系统有一些固定的role,这些Role包含部分已经定义好的权限集(privilege set),也可以再自定义部分新的role).10. 事实上,丢弃一切已知的关于连接访问的设置吧,Oracle使用一套全新的系统来处理连接访问.11. 支持全文搜索,不过语法完全不同.12. Oracle的文档非常丰富,不过,如果需要Oracle的专业服务,你需要拥有Metalink的访问权限.13. 在非数据库社区很难找到相关的支持信息(例如,PHP论坛或者网站开发者的网志)14. 自增功能可以通过Trigger与sequence对象来实现.15. 大量日常熟悉的SHOW命令将不再可用,想要获取系统信息,需要你学习Oracle的数据字典(或信息Schema),深入一点的还需要学习Oracle动态性能.16. MySQL为信息Schema添加了多个非标准的扩展,在Oracle中将很难找到这些信息.17. 为了管理好生产系统与非生产系统的的转入转出,需要你深入理解Oracle的授权规则.18. 大体上讲,Oracle的数值类型更加简单,如果你确实需要类似于MySQL的多粒度的数值类型,就需要你自己来实现它,或者通过制定不同的精度(Number(n,x))来实现.19. 在Oracle中,表可以做到无限制的增长,但是大部分情况下,都建议通过表空间(tablespace)来对此作细粒度的管理.20. Oracle不支持ALTER TABLE ADD COLUMN BEFORE|AFTER,也就是不支持自己制定字段的位置.(我们这边之前有部分应用对字段顺序有严格地要求,不过,从理论上讲,这是业务设计的问题,主要是其大部分情况下都是使用select *或者insert table values来处理数据,而不是在select,insert中指定具体需要处理的字段名列表).21. 如果你习惯于通过图形界面(GUI)来管理数据库,你一定会喜欢上Oracle,但是如果你倾向于使用类似与Mysql 命令行的客户端,你可能会对sql*plus这个客户端工具感到失望(需要一个习惯的过程,sql*plus还是蛮好用的).22. Oracle的数据校验比Mysql更加严格,依赖于MySQL的模糊规则可能会导致应用无法运行.MySQL 接受”0000-00-00″来作为日期类型的值就是个典型的例子.23. 虽然Oracle的PL/SQL功能更强,但是它不支持标准的PSM语言来编写存储过程,因此你可能不得不学习它的非标准的语法.24. Oracle不支持ENUM数据类型,只能通过使用基于文本的check约束或者创建外键关联表来实现.25. Mysql的一些更加神秘的表类型(例如,blackhole,csv),在Oracle中找不到相对应的功能. (不清楚blockhole是何种类型,不过Oracle的外部表(external table)确实是支持csv格式的,在11g版本中还支持对此文件的压缩/加密以及其他处理).26. Oracle中的Group By语句必须是确定的,它需要select list中出现的所有列都必须包含在group by从句中.27. Oracle的exp命令输出的dmp文件无法象Mysql的转储文件一样可以手工修改.28. Oracle的底层实现有较大变化,需要你学习UNDO与REDO segment,归档,以及DBWR进程. (个人认为Oracle相对于其他数据库的主要的优势可能就是其UNDO/REDO的设计了.)29. Oracle不是开源软件,因此你无法在上面进行修补/优化/修复/实现你自己的东西.Robert Hodges30. Oracle的查询优化是一件需要专家介入的工作.它的优化器比MySQL的要成熟的多,这意味着查询计划也相应的更加难以解释.如果你有一个大的应用,请准备好聘用一位了解如何有效进行此项工作的伙计.31. Oracle的基于成本的优化器的有效运行需要精确的统计信息.对于发生变化的表,需要定期的为其收集统计信息.批量数据加载进程也需要在处理过程中不时的执行estimate/compute statistics命令来收集统计信息以取得满意的性能.32. 在Oracle中,创建连接是个代价高昂的操作.性能良好的Oracle应用都倾向于使用连接池来最小化登陆的开销.33. Oracle应用需要应用prepared statement以获取可观的性能.如果你的应用不使用prepared statement的话,需要对应用进行调整.这是应用Oracle数据库的标准编程实践.(此处的prepared statement应该更多的是指使用绑定变量).34. 应用需要关闭结果集游标,否则很快就会遇到著名的”ORA-01000 Too many open cursors”错误.在Oracle中,这被认为是一个用户错误,需要你去调整你的代码.35. 繁忙系统上的长查询可能会遭遇到” ORA-01555 Snapshot too old”错误.可以通过调整redo 段的大小(有时通过调整应用)来消除此错误,但是还是需要你关注这一点.(此处的redo segments的表述是有点问题,此处应该是Undo tablespace以及对应的Undo Retention,Oracle没有所谓的redo segment的说法).36. Oracle没有类似于非事务表的概念.大部分Oracle用户都认可这一点.37. Oracle的临时表定义是持久的SQL对象,并且对所有用户都可见(此处应该理解成以此用户登陆的会话,Session).这一点与MySQL中使用的轻量级表有区别,在MySQL中,临时表是在单个会话内创建并销毁的.Denish Patel38. 在Oracle中,多个Alter Table操作不能在同一个SQL语句中执行,例如alter table emp modify name varchar(64) not null, add gender char(1) not null;39. 默认情况下,Oracle不会自动提交.40. KILL命令在Oracle中无效,它使用alter system kill命令.(不清楚第一个kill是什么概念,操作系统级别的kill,Oracle还是支持的,我经常使用).41. Oracle在Order by语句中不支持使用减号(-).(不清楚这个具体的减号是什么东西).42. Oracle的sqlplus命令行接口不支持高亮显示.Roland Bouman43. Oracle不支持group_concat或者类似的分组函数.需要你通过循环调取游标来实现,或者通过组合XMLAGG与XMLQUERY来实现你需要的查询.(在Oracle 9R2之后,可以使用自定义聚合函数来实现这个功能,到Oracle 11gR1之后,Oracle自己还提供了一个新的listagg分组函数来实现这个功能).44. 对于count(distinct expression)函数,Oracle只支持一个表达式(要么一个列名,要么*),而Mysql支持一组表达式. (在Oracle中要实现一组表达式,可以通过使用子查询来实现).45. Oracle对子查询的支持非常好.不要因为Mysql中的习惯而不去使用它.46. Oracle不支持用户变量(@num).如果你需要利用它来计算运行时总和,可以利用分析函数(窗口函数)来实现.如果用用户变量来实现特定的汇总函数功能,你将发现Oracle已经有内置得功能支持这些功能.(另外在Oracle中,可以通过在package中应用dbms_session来设置context以实现用户变量).47. Oracle没有区分TIME与DATE类型,Oracle的Date类型实际上就是一个DATETIME类型(但是比MySQL支持一个更大的日期范围).48. 相对于MySQL来讲,Oracle的存储过程与触发器功能与性能都要好很多.不要习惯性地不去使用它们.49. 如果需要在Oracle中编写存储过程,记得在开始编码前花点时间了解下Oracle是不是有相应的内置package.你将发现大部分问题已经解决掉了,或者至少大量的基础代码已经在那儿了.50 如果你在MySQL中有使用BLOB类型或者TEXT类型,你可能会将他们迁移到Oracle地BLOB与CLOB 中.然而,与MySQL不同,Oracle并不是透明地实体化这些数据.在大部分情况下,这确实是件好事情,但是它也意味着如果你只是想把BLOB/CLOB当作文本处理,你将需要花费大量琐碎的时间来使用LOB函数,在使用之初,LOB函数还是蛮让人气馁的.(LOB相关函数确实挺烦人,LOB的处理效率也非常差,即使是使用Oracle 11g的SecureFile).When you are old and grey and full of sleep,And nodding by the fire, take down this book,And slowly read, and dream of the soft lookYour eyes had once, and of their shadows deep;How many loved your moments of glad grace,And loved your beauty with love false or true,But one man loved the pilgrim soul in you,And loved the sorrows of your changing face;And bending down beside the glowing bars,Murmur, a little sadly, how love fledAnd paced upon the mountains overheadAnd hid his face amid a crowd of stars.The furthest distance in the worldIs not between life and deathBut when I stand in front of youYet you don't know thatI love you.The furthest distance in the worldIs not when I stand in front of youYet you can't see my loveBut when undoubtedly knowing the love from both Yet cannot be together.The furthest distance in the worldIs not being apart while being in loveBut when I plainly cannot resist the yearningYet pretending you have never been in my heart. The furthest distance in the worldIs not struggling against the tidesBut using one's indifferent heartTo dig an uncrossable river For the one who loves you.。
mysql和oracle的区别有哪些
mysql和oracle的区别有哪些MySQL和Oracle有什么区别?两个数据库的特性是不同的,所以与Oracle相比,MySQL的使用方式不同;与MySQL相比,Oracle的使用情况有所不同。
它们的特点也是不同的。
下面我们就来具体看看MySQL和Oracle的区别有哪些。
1、本质的区别Oracle数据库是一个对象关系数据库管理系统(ORDBMS)。
它通常被称为Oracle RDBMS或简称为Oracle,是一个收费的数据库。
MySQL是一个开源的关系数据库管理系统(RDBMS)。
它是世界上使用最多的RDBMS,作为服务器运行,提供对多个数据库的多用户访问。
它是一个开源、免费的数据库。
2、数据库安全性MySQL使用三个参数来验证用户,即用户名,密码和位置;Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等。
3、SQL语法的区别Oracle的SQL语法与MySQL有很大不同。
Oracle为称为PL / SQL的编程语言提供了更大的灵活性。
Oracle的SQL * Plus 工具提供了比MySQL更多的命令,用于生成报表输出和变量定义。
4、存储上的区别:与Oracle相比,MySQL没有表空间,角色管理,快照,同义词和包以及自动存储管理。
5、对象名称的区别:虽然某些模式对象名称在Oracle和MySQL中都不区分大小写,例如列,存储过程,索引等。
但在某些情况下,两个数据库之间的区分大小写是不同的。
Oracle对所有对象名称都不区分大小写;而某些MySQL对象名称(如数据库和表)区分大小写(取决于底层操作系统)。
6、运行程序和外部程序支持:Oracle数据库支持从数据库内部编写,编译和执行的几种编程语言。
此外,为了传输数据,Oracle数据库使用XML。
MySQL不支持在系统内执行其他语言,也不支持XML。
7、MySQL和Oracle的字符数据类型比较:两个数据库中支持的字符类型存在一些差异。
mysql、oracle存储过程语法区别
mysql、oracle存储过程语法区别mysql、oracle存储过程语法区别1、条件语句:mysql使用elseif关键字,oracle是elsif关键字;oracle:if表达式 then表达式;elsif表达式;endif;mysql:if表达式then表达式;elseif表达式;endif;2、字符串连接oracle使用 || ;mysql 使用concat函数;3、日期计算(年月日数)mysql:函数TimeStampDiff()是MySQL本身提供的可以计算两个时间间隔的函数,语法为:TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2),其中unit 单位有如下几种,分别是:SECOND, MINUTE, HOUR, DAY,WEEK, MONTH, QUARTER, or YEAR。
1 当前时间:sysdate()1 字符转日期:str_to_date() 分隔符一致,年月日要一致;示例:select str_to_date('2008-4-2 15:3:28','%Y-%m-%d%H:%i:%s');1 日期转字符:DATE_FORMAT(date,format)1 S ELECT DATE_FORMAT(sysdate(), '%Y-%m-%d %H:%i:%s');1 数字转字符:concat(num,’’)oracle :months_between 求日期间隔月份,除以12即为间隔年份; 天数,只需要日期直接相减;当前时间:sysdate字符转日期:to_date()1 日期转字符:to_char(date,format) to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')1 数字转字符:to_char(num)4、 定义游标oracel :CURSOR curPlanIndex isSELECT a.INDEX_SCORE,c.enum_value,c.dn_value,c.up_value,c.score,c.score_desc FROM eval_plan_index aJOIN eval_index_score c onc.index_id=a.index_id and a.plan_id = c.plan_idWHERE a.plan_id = V_PLAN_ID and a.index_id= V_INDEX_ID order by dn_value;MYSQL:declare curPlanIndex cursor forSELECT a.INDEX_SCORE,c.enum_value,c.dn_value,c.up_value,c.score,c.score_desc FROM eval_plan_index aJOIN eval_index_score c onc.index_id=a.index_id anda.plan_id = c.plan_idWHERE a.plan_id = V_PLAN_ID and a.index_id= V_INDEX_ID order by dn_value;5、 selectinto 赋值oracle 有exception错误处理beginselect value_name into vc_num_unit fromsys_dictwhere dict_code = 'szdw' and value_code =v_num_unit and rownum <=1 ;exceptionwhen no_data_found thenvc_num_unit := '';end;mysql 如果select 没有数据,则不执行into操作,变量值保持为上次结果,需要手工重置。
数据库选型:MySQL、Oracle和MongoDB
数据库选型:MySQL、Oracle和MongoDB随着互联网及大数据时代的到来,数据的规模和复杂度不断增大,如何实现高效、稳定、安全的数据存储和处理成为了企业数据管理中的重要问题。
在数据库中,MySQL、Oracle和MongoDB等数据库成为了各个领域最为常用的数据库系统。
本文将分别从MySQL、Oracle和MongoDB三个方面来探讨它们的优缺点以及适用场景,以期为企业数据库选型提供一些参考意见。
MySQL:开源数据库MySQL是一种开源数据库,根据MySQL官方网站统计,全球用户数量已超过1亿。
MySQL是一款基于SQL语言的关系型数据库管理系统,适用于大型企业、中小企业以及各种互联网应用程序等领域。
MySQL作为一种开源产品,具有以下优点:1.免费、开源。
MySQL以GPL(通用公共许可证)的方式发布,用户可以根据自己的需求,自由地获取、拷贝、修改和分发MySQL源代码,这使得用户可以在没有额外软件费用的情况下使用MySQL,为企业降低了成本。
2.易于学习,支持SQL语言。
MySQL采用标准化的SQL语言,操作简单、易学易用,使得用户快速掌握MySQL的使用技巧。
3.安全、可靠、稳定。
MySQL的安全性得到了广泛的认可,在短短几年内,已成为众多项目和应用程序的首选数据库系统,实时性高、支持高并发、可靠性高,受到了各种规模的企业用户及互联网应用、网站的广泛使用。
4.支持多个平台。
开源免费的MySQL支持多个平台,包括Linux、Unix、Windows等主流操作系统,兼容性强,易于部署。
但是,MySQL也存在一些缺点:1.对于高负载、高并发的应用,MySQL的性能和稳定性没有Oracle好,需要进行优化。
2. MySQL在处理大数据时,容易因为表锁定、索引失效等问题而卡住,导致系统的响应能力降低。
3. MySQL不支持XML和JSON数据类型,不适用于需要处理复杂数据结构的应用。
适用场景:MySQL适用于中小企业及互联网应用领域,如网站、博客、论坛等。
oracle与Mysql的增删改语法区别对比
oracle与Mysql的增删改语法区别对⽐1. 创建表MySQL:create table test(id int(10) not null primary key comment '主键id',amt decimal(18,2) default null comment '⾦额')comment='测试表';Oracle:create table t1(id varchar2(32) defaule 0 not null primary key,name varchar2(32) ,age varchar2(32))添加表注释:comment on table t1 is '个⼈信息';添加字段注释:comment on column t1.id is 'id';comment on column is '姓名';comment on column t1.age is '年龄';2. 删除表MySQL:drop table if exists tableName;Oracle:drop table tableName;注:Oracle没有if exists关键字,也没⽤类似if exists的SQL语法。
drop、truncate、delete的区别:1、drop (删除表):删除内容和定义,释放空间。
简单来说就是把整个表去掉.以后要新增数据是不可能的,除⾮新增⼀个表。
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
2、truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。
与drop不同的是,只是清空表数据⽽已。
注意:truncate 不能删除⾏数据,要删就要把表清空。
MySql,Oracle三种数据库性能优缺点及异同
Microsoft SQL Server 2000简化了管理、优化工作,并且增强了迅速、成功的部署在线商务应用程序所需的可靠性和伸缩性。其中,用以提高可靠性的特性包括日志传送、在线备份和故障切换群集。在伸缩性方面的改进包括对多达32颗CPU和64 GB RAM的支持。通过自动优化和改进后的管理特性--诸如数据文件尺寸的自动管理、基于向导的数据库拷贝、自动内存管理和简化的故障切换群集安装与管理,在线商务应用程序能够被迅速部署并有效管理。
MySql支持ODBC for Windows。MySql支持所有的ODBC 2.5函数和其他许多函数,这样就可以用Access连接MySql服务器,从而使得MySql的应用被大大扩展。
MySql支持大型的数据库。虽然对于用PHP编写的网页来说只要能够存放上百条以上的记录数据就足够了,但MySql可以方便地支持上千万条记录的数据库。作为一个开放源代码的数据库,MySql可以针对不同的应用进行相应的修改。
如果windowsNT不能满足需要, 用户可以把数据库移到UNIX中。
安全性方面,性能最高。
客户端支持及应用模式 ,多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接式要求,可根据实际系统需求构造数据库。
采用标准的SQL结构化查询语言。
具有丰富的开发工具,覆盖开发周期的各阶段。
支持大型数据库,数据类型支持数字、字符、大至2GB的二进制数据,为数据库的面向对象存储提供数据支持。
具有第四代语言的开发工具(SQL*FORMS、SQL*REPORTS、SQL*MENU等)。
具有字符界面和图形界面,易于开发。
通过SQL*DBA控制用户权限,提供数据保护功能,监控数据库的运行状态,调整数据缓冲区的大小。
oracle和mysql几点差异对比
oracle和mysql⼏点差异对⽐Oracle与mysql差异性总结之前有个项⽬是⽤oracle数据库进⾏开发,需要把数据库改成mysql,遇到了⼀些地⽅需要注意的,就简单记了下来。
备注:再把oracle转成mysql的时候,表中字段的类型转换是⽐较头疼的,⽐如oracle中的number转成mysql的时候,你要从“FLOAT、DOUBLE、TINYINT、 SMALLINT、MEDIUMINT、INT、BIGINT”中选择⼀个合适的,其他数据类型同理;⼯具转的话经常就会把你带进坑⾥了。
坑爹,⼀不⼩⼼就报错了,这个错误排查起来还⽐较⿇烦,只有细⼼应对。
⼀、WM_CONCAT对应GROUP_CONCAT;⼆、ronum可⽤limit代替;三、sys_guid()⽤uuid()代替四、add_months(t2.maxTime,-12)⽤date_add(t2.maxTime,interval -12 month)代替;date_format(date,'%Y-%m-%d')-->oracle中的to_char();str_to_date(date,'%Y-%m-%d')-->oracle中的to_date();%Y:代表4位的年份%y:代表2为的年份%m:代表⽉, 格式为(01……12)%c:代表⽉, 格式为(1……12)%d:代表⽉份中的天数,格式为(00……31)%e:代表⽉份中的天数, 格式为(0……31)%H:代表⼩时,格式为(00……23)%k:代表⼩时,格式为(0……23)%h:代表⼩时,格式为(01……12)%I:代表⼩时,格式为(01……12)%l :代表⼩时,格式为(1……12)%i:代表分钟, 格式为(00……59)%r:代表时间,格式为12 ⼩时(hh:mm:ss [AP]M)%T:代表时间,格式为24 ⼩时(hh:mm:ss)%S:代表秒,格式为(00……59)%s:代表秒,格式为(00……59)例⼦:select case when add_months(t2.maxTime,-12)>t1.minTime then to_char(add_months(t2.maxTime,-12),'yyyy-MM') else to_char(t1.minTime,'yyyy-MM') end as startTime,to_char(t2.maxTime,'yyyy-MM') as endTime from(select min(t.log_time) as 转为:select case when date_add(t2.maxTime,interval -12 month)>t1.minTime then date_format(date_add(t2.maxTime,interval -12 month),'%Y-%m') else date_format(t1.minTime,'%Y-%m') end as startTime,date_format(t2.maxTime,'%Y-%m'五、oracle中:to_char(number)把number转成varchar2,在mysql中⽤concat(number)六、oracle中:to_number在mysql中可以⽤cast或者convert七、Oracle中记录⾏号⽤Rownum RN;在mysql中:Select UID,(@rowNum:=@rowNum+1) as rowNo From a,(Select (@rowNum :=0) ) b Order by a.Money Desc;⼋、SmRappfucauthEntityMapper.xml中的insert:merge into九、在mapper.xml中,oracle语法:AND rolename like '%'||#{rolename}||'%'Mysql语法:AND rolename like CONCAT(CONCAT('%',#{rolename ,jdbcType=VARCHAR}),'%')⼗、mysql报错:mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同⼀表中的某些值,再update这个表(在同⼀语句中)。
mysql与oracle的50个区别
Mysql与Oracle的50个区别1. 有些人说Oracle没有限制,实际上他们说得可能是Oracle不支持LIMIT语法.不过可以rownum虚列来实现,不过会加倍麻烦.2. Oracle不支持偏移(offset)语法.3. Oracle的复制功能可能比MySQL加倍健壮,不过也加倍难以配置.4. 对于多个Master类型的系统,大部份用户都希望你利用加倍复杂也加倍昂贵的Oracle RAC(虽然可能NDB加倍健壮).5. Oracle的分区功能超级健壮,可是它不是内置的,并需要专门为此付费(分区功能是在Enterprise Edition里面是内置的).6. 在Linux/Unix上,Oracle并非象Mysql那么方便,很多Linux/Unix发行版默许就会自带Mysql.(我对这一点的理解与翻译可能都有误差)7. INSERT … ON DUPLICATE KEY UPDATE语法将再也不可用,不过你需要学习加倍复杂(可是符合SQL标准)的MERGE语法.8. Oracle的ROLE架构与MySQL有很大差别,无法再利用root角色来完整所有工作.(不过Sys 用户的权限仍然与root相差无几,只是为了安全着想,不建议这么利用了).9. Role 帐户与特定的Schema联系在一路(反之也一样),类似于MySQL数据库中的Database 概念.(Role并非完全与Schema联系在一路,系统有一些固定的role,这些Role包括部份已经概念好的权限集(privilege set),也可以再自概念部份新的role).10. 事实上,抛弃一切已知的关于连接访问的设置吧,Oracle利用一套全新的系统来处置连接访问.11. 支持全文搜索,不过语法完全不同.12. Oracle的文档超级丰硕,不过,若是需要Oracle的专业服务,你需要拥有Metalink的访问权限.13. 在非数据库社区很难找到相关的支持信息(例如,PHP论坛或网站开发者的网志)14. 自增功能可以通过Trigger与sequence对象来实现.15. 大量日常熟悉的SHOW命令将再也不可用,想要获取系统信息,需要你学习Oracle的数据字典(或信息Schema),深切一点的还需要学习Oracle动态性能.16. MySQL为信息Schema添加了多个非标准的扩展,在Oracle中将很难找到这些信息.17. 为了管理好生产系统与非生产系统的的转入转出,需要你深切理解Oracle的授权规则.18. 大体上讲,Oracle的数值类型加倍简单,若是你确实需要类似于MySQL的多粒度的数值类型,就需要你自己来实现它,或通过制定不同的精度(Number(n,x))来实现.19. 在Oracle中,表可以做到无穷制的增加,可是大部份情况下,都建议通过表空间(tablespace)来对此作细粒度的管理.20. Oracle不支持ALTER TABLE ADD COLUMN BEFORE|AFTER,也就是不支持自己制定字段的位置.(咱们这边之前有部份应用对字段顺序有严格地要求,不过,从理论上讲,这是业务设计的问题,主如果其大部份情况下都是利用select *或insert table values来处置数据,而不是在select,insert中指定具体需要处置的字段名列表).21. 若是你习惯于通过图形界面(GUI)来管理数据库,你必然会喜欢上Oracle,可是若是你偏向于利用类似与Mysql 命令行的客户端,你可能会对sql*plus这个客户端工具感到失望(需要一个习惯的进程,sql*plus仍是蛮好用的).22. Oracle的数据校验比Mysql加倍严格,依赖于MySQL的模糊规则可能会致使应用无法运行.MySQL接受”0000-00-00″来作为日期类型的值就是个典型的例子.23. 虽然Oracle的PL/SQL功能更强,可是它不支持标准的PSM语言来编写存储进程,因此你可能不能不学习它的非标准的语法.24. Oracle不支持ENUM数据类型,只能通过利用基于文本的check约束或创建外键关联表来实现.25. Mysql的一些加倍神秘的表类型(例如,blackhole,csv),在Oracle中找不到相对应的功能. (不清楚blockhole是何种类型,不过Oracle的外部表(external table)确实是支持csv格式的,在11g版本中还支持对此文件的紧缩/加密和其他处置).26. Oracle中的Group By语句必需是肯定的,它需要select list中出现的所有列都必需包括在group by从句中.27. Oracle的exp命令输出的dmp文件无法象Mysql的转储文件一样可以手工修改.28. Oracle的底层实现有较大转变,需要你学习UNDO与REDO segment,归档,和DBWR进程. (个人以为Oracle相对于其他数据库的主要的优势可能就是其UNDO/REDO的设计了.)29. Oracle不是开源软件,因此你无法在上面进行修补/优化/修复/实现你自己的东西.Robert Hodges30. Oracle的查询优化是一件需要专家介入的工作.它的优化器比MySQL的要成熟的多,这意味着查询计划也相应的加倍难以解释.若是你有一个大的应用,请准备好聘用一名了解如何有效进行此项工作的伙计.31. Oracle的基于本钱的优化器的有效运行需要精准的统计信息.对于发生转变的表,需要按期的为其搜集统计信息.批量数据加载进程也需要在处置进程中不时的执行estimate/compute statistics命令来搜集统计信息以取得满意的性能.32. 在Oracle中,创建连接是个代价昂贵的操作.性能良好的Oracle应用都偏向于利用连接池来最小化登岸的开销.33. Oracle应用需要应用prepared statement以获取可观的性能.若是你的应用不利用prepared statement的话,需要对应用进行调整.这是应用Oracle数据库的标准编程实践.(此处的prepared statement应该更多的是指利用绑定变量).34. 应用需要关闭结果集游标,不然很快就会碰到著名的”ORA-01000 Too many open cursors”错误.在Oracle中,这被以为是一个用户错误,需要你去调整你的代码.35. 忙碌系统上的长查询可能会遭碰到” ORA-01555 Snapshot too old”错误.可以通过调整redo 段的大小(有时通过调整应用)来消除此错误,可是仍是需要你关注这一点.(此处的redo segments的表述是有点问题,此处应该是Undo tablespace和对应的Undo Retention,Oracle没有所谓的redo segment的说法).36. Oracle没有类似于非事务表的概念.大部份Oracle用户都认可这一点.37. Oracle的临时表概念是持久的SQL对象,而且对所有效户都可见(此处应该理解成以此用户登岸的会话,Session).这一点与MySQL中利用的轻量级表有区别,在MySQL中,临时表是在单个会话内创建并销毁的.Denish Patel38. 在Oracle中,多个Alter Table操作不能在同一个SQL语句中执行,例如alter table emp modify name varchar(64) not null, add gender char(1) not null;39. 默许情况下,Oracle不会自动提交.40. KILL命令在Oracle中无效,它利用alter system kill命令.(不清楚第一个kill是什么概念,操作系统级别的kill,Oracle仍是支持的,我常常利用).41. Oracle在Order by语句中不支持利用减号(-).(不清楚这个具体的减号是什么东西).42. Oracle的sqlplus命令行接口不支持高亮显示.Roland Bouman43. Oracle不支持group_concat或类似的分组函数.需要你通过循环调取游标来实现,或通过组合XMLAGG与XMLQUERY来实现你需要的查询.(在Oracle 9R2以后,可以利用自概念聚合函数来实现这个功能,到Oracle 11gR1以后,Oracle自己还提供了一个新的listagg分组函数来实现这个功能).44. 对于count(distinct expression)函数,Oracle只支持一个表达式(要么一个列名,要么*),而Mysql支持一组表达式. (在Oracle中要实现一组表达式,可以通过利用子查询来实现).45. Oracle对子查询的支持超级好.不要因为Mysql中的习惯而不去利用它.46. Oracle不支持用户变量(@num).若是你需要利用它来计算运行时总和,可以利用分析函数(窗口函数)来实现.若是用用户变量来实现特定的汇总函数功能,你将发现Oracle已经有内置得功能支持这些功能.(另外在Oracle中,可以通过在package中应用dbms_session来设置context以实现用户变量).47. Oracle没有区分TIME与DATE类型,Oracle的Date类型实际上就是一个DATETIME类型(可是比MySQL支持一个更大的日期范围).48. 相对于MySQL来讲,Oracle的存储进程与触发器功能与性能都要好很多.不要习惯性地不去利用它们.49. 若是需要在Oracle中编写存储进程,记得在开始编码前花点时间了解下Oracle是不是有相应的内置package.你将发现大部份问题已经解决掉了,或至少大量的基础代码已经在那儿了.50 若是你在MySQL中有利用BLOB类型或TEXT类型,你可能会将他们迁移到Oracle地BLOB 与CLOB中.但是,与MySQL不同,Oracle并非是透明地实体化这些数据.在大部份情况下,这确实是件好事情,可是它也意味着若是你只是想把BLOB/CLOB看成文本处置,你将需要花费大量琐碎的时间来利用LOB函数,在利用之初,LOB函数仍是蛮让人气馁的.(LOB相关函数确实挺烦人,LOB的处置效率也超级差,即便是利用Oracle 11g的SecureFile).。
