mysql和oracle部分格式转换函数的区别

合集下载

Oracle到mysql转换的问题总结

Oracle到mysql转换的问题总结

Oracle到mysql转换的问题总结常用字段类型区别个别语句写法区别1.oracle里只可以用单引号包起字符串,mysql里可以用双引号和单引号。

2.mysql 在select * from () ....,from后面是一个结果集时,括号后面必须加上别名。

3.mysql在delete数据时不能给表加别名,如:delete from table1 T where....,会报错,但是可以这样写:delete T from table1 T where....。

4.Mysql不支持在同一个表中先查这个表在更新这个表,举个例子说明一下,insert into table1values(字段1,(select 字段2 from table1where...)),但是可以在后面那个table1加上别名就没有问题了。

insert into table1values(字段1,(select T.字段2 from table1T where...))5.MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。

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

也可以自定义函数实现oracle的nextval。

6.翻页的sql语句处理,MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数,例如:select * from table limit m,n,意思是从m+1开始取n条。

常见的函数替换例子:Oracle:select decode(a,b,c,d) as col1 from table1;Mysql:selectcasewhen a=b then cwhen a!=b then dend as col1from table13.oracle的函数ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2),根据col1分组,在分组内根据col2排序,改函数计算的值就表示每组内部排序后的顺序编号。

mysql与oracle之间的数据类型转换

mysql与oracle之间的数据类型转换

mysql与oracle之间的数据类型转换⼀、常见数据类型在MySQL与Oracle数据库中的表现形式说明mysql oracle变长字符串VARCHAR[0-65535]定义长度默认按字符长度计算,如果是GBK编码的汉字将占⽤2个字节VARCHAR2[1-4000]VARCHAR是VARCHAR2的同义词定义默认按字节长度计算整数TINYINT(-128-127)SMALLINT(-32768-32767)MEDIUMINT(-8388608-8388607)INT(-2147483648-2147483647)BIGINT(-9223372036854775808-9223372036854775807)⽆专⽤类型,TINYINT可以⽤NUMBER(3,0)代替SMALLINT可以⽤NUMBER(5,0)代替MEDUIMINT可以⽤NUMBER(7,0)代替INT可以⽤NUMBER(10,0)代替BIGINT可以⽤NUMBER(20,0)代替ORACLE中有SMALLINT,INT,INTEGER类型,不过这是NUMBER(38,0)的同义词数值类型DECIMAL[1-65[,0-30]]NUMERIC是DECIMAL的同义词NUMBER 可表⽰数范围: 1*10^-130⾄1*10^126NUMBER([1-38][,-84-127])DECIMAL、NUMERIC、DEC是NUMBER的同义词浮点型FLOAT(D,M)oracle10g开始增加BINARY_FLOAT类型10g以前⽆专⽤类型,可以⽤NUMBER 代替ORACLE中有FLOAT和REAL类型,不过这是NUMBER的同义词双精度浮点型DOUBLE(D,M)oracle10g开始增加BINARY_DOUBLE 类型10g以前⽆专⽤类型,可以⽤NUMBER 代替ORACLE中有DOUBLE PRECISION 类型,不过这是NUMBER的同义词位类型BIT(1-64)⽆⽇期类型DATE,3字节存储,只存储⽇期,没有时间,⽀持范围是[1000-01-01]⾄[9999-12-31]TIME,3字节存储,只存储时间,没有⽇期,⽀持范围是[-838:59:59]⾄[838:59:59]DATETIME,占8字节存储,可表⽰⽇期和时间,⽀持范围是[1000-01-01 00:00:00]⾄[9999-12-31 23:59:59]TIMESTAMP,占4字节存储,可表⽰⽇期和时间,范围是DATE类型7字节存储,可表⽰⽇期和时间,⽀持范围是[-4712-01-01 00:00:00]⾄[9999-12-31 23:59:59]可表⽰⽇期和时间,范围是[1970-01-01 00:00:00]⾄[2038-01-19 03:14:07]⾼精度⽇期5.6.4以前不⽀持⼩数秒精度5.6.4开始TIME,DATETIME,TIMESTAMP⽀持,最多可以6位⼩数秒,也就是微秒级别TIMESTAMP[0-9]占⽤空间7-11个字节,当⼩数秒精度为0时与DATE类型相同,⼩数秒最⾼精度可达9位,也就是纳精度年份YEAR,1字节存储,只存储年份,⽀持范围是[1901]⾄[2155]⽆对应类型,可以⽤NUMBER(3,0)代替CHAR[0-255],定义长度默认按字符长度计算,最⼤保存255字符CHAR[1-2000]定义默认按字节长度计算⽀持,⽤于数值类型不⽀持TINYTEXT 最⼤⽀持255个字节TEXT最⼤⽀持65535个字节MEDIUMTEXT最⼤⽀持16MB个字节LONGTEXT最⼤⽀持4GB字节字段不⽀持默认值⽀持(CLOB)oracle10g以前最⼤⽀持4GB个字节oracle10g开始最⼤⽀持4GB个数据块,数据块⼤⼩为2KB-32KBoracle还有⼀个LONG类型,是早期的存储⼤字符串类型,最⼤⽀持2GB字节,现已不推荐使⽤TINYBLOB 最⼤⽀持255个字节BLOB最⼤⽀持65535个字节MEDIUMBLOB最⼤⽀持16MB个字节LONGBLOB最⼤⽀持4GB字节字段不⽀持默认值⽀持(BLOB)oracle10g以前最⼤⽀持4GB个字节oracle10g开始最⼤⽀持4G个数据块,数据块⼤⼩为2KB-32KBoracle还有⼀个LONG RAW类型,是早期的存储⼆进制类型,最⼤⽀持2GB字节,现已不推荐使⽤BINARY(0-255),定长VARBINARY(0-65535),变长RAW(1-2000)ENUM(v1,v2,v3,...),最多65535个元素不⽀持SET(v1,v2,v3,...),最多64个元素不⽀持⽆,MYSQL可以对每个字段指定字符编码⽀持NCHAR(1-2000)NVARCHAR(1-4000)NCLOB不⽀持⽀持⽂件⼤⼩最⼤4GB⽂件名称最长255字符不⽀持⽀持不⽀持⽀持⽀持使⽤简单不⽀持⼀般使⽤SEQUENCE解决,⽤法与⾃增类型差别较⼤,使⽤较复杂,但能实现⾮常灵活的应⽤,包括字符⾃增主键、全局主键等等不⽀持函数和表达式TEXT和BLOB字段类型不⽀持默认值⽀持函数和表达式⽀持,例如,把emp表的id字段顺序放在name字段后⾯:alter table emp modify columnid varchar(20) after name;不⽀持,只能重建表或字段不⽀持11g⽀持,例:create table sales(id number,quantity number,=单价*数量不⽀持 quantity number,price number,amount GENERATED always as(quantity*price) virtual);INNODB 最⼤1000个字段所有字段总定义长度不能超过65535字节所有固定长度字段的总长度不超过半个数据块⼤⼩(数据块⼤⼩⼀般为16K)最⼤1000个字段⼆、MySQL与Oracle数据库常见数据类型对应关系编号ORACLE MYSQL注释1NUMBER int / DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表⽰整型;MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不⼀样2Varchar2(n)varchar(n) 3Date DATATIME ⽇期字段的处理MYSQL⽇期字段分DATE和TIME两种,ORACLE⽇期字段只有DATE,包含年⽉⽇时分秒信息,⽤当前数据库的系统时间为 SYSDATE, 精确到秒,或者⽤字符串转换成⽇期型函数TO_DATE(‘2001-08-01','YYYY-MM-DD')年-⽉-⽇ 24⼩时:分钟:秒的格式YYYY-MM-DDHH24:MI:SS TO_DATE()还有很多种⽇期格式, 可以参看ORACLE DOC.⽇期型字段转换成字符串函数TO_CHAR(‘2001-08-01','YYYY-MM-DD HH24:MI:SS')⽇期字段的数学运算公式有很⼤的不同。

ORACLE和MYSQL一些函数和实现效果的对比替换

ORACLE和MYSQL一些函数和实现效果的对比替换

ORACLE和MYSQL一些函数和实现效果的对比替换Oracle和MySQL是两种常见的关系型数据库管理系统(RDBMS)。

尽管它们有相似的功能和语法,但在一些函数和实现效果方面存在一些差异。

下面是一些Oracle和MySQL函数及其替换或对比的例子:1.数据类型的转换:- Oracle中使用TO_CHAR、TO_NUMBER、TO_DATE等函数来转换数据类型。

而在MySQL中,可以使用CAST或CONVERT函数来实现类似的功能。

2.字符串函数:- Oracle中的函数SUBSTR、INSTR、CONCAT可以在MySQL中使用相同的名称进行替换。

但是在MySQL中,可以使用CONCAT_WS函数实现更多的字符串连接功能。

- 例如,使用SUBSTR函数来截取字符串,在Oracle中可以这样写:SUBSTR('Hello World', 7, 5);而在MySQL中可以这样写:SUBSTRING('Hello World', 7, 5)。

- 在Oracle中使用INSTR函数来查找字符串的位置,比如INSTR('Hello World', 'Wo');而在MySQL中可以使用LOCATE函数实现相同的功能:LOCATE('Wo', 'Hello World')。

3.日期和时间函数:- Oracle和MySQL都提供了一系列的日期和时间函数,如SYSDATE、CURRENT_TIMESTAMP、ADD_MONTHS、DATE_TRUNC等。

很多函数在两个数据库中名称和用法都相似,但也有一些区别。

- 例如,Oracle中的函数ADD_MONTHS可以用于添加月份,而在MySQL中,可以使用DATE_ADD函数实现相同的功能。

- 另一个例子是,Oracle中的函数DATE_TRUNC可以截取日期,如DATE_TRUNC('MONTH', sysdate);而在MySQL中可以使用DATE_FORMAT函数实现类似的效果:DATE_FORMAT(sysdate, '%Y-%m-01')。

mysql和oracle语句有什么区别

mysql和oracle语句有什么区别

mysql和oracle语句有什么区别篇一: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).篇二:mysql与oracle区别MySQL是遵守双重协议的,一个是GPL(General Public License,公共许可证)授权协议,一个是MySql AB制定的商用授权协议(注释:为解决其他企业用MySQL软件牟利或引用了MySQL的源代码而不想开源)。

Oracle和Mysql操作上的一些区别

Oracle和Mysql操作上的一些区别

Oracle和Mysql操作上的⼀些区别Oracle和Mysql操作上的⼀些区别:1、主键 Mysql⼀般使⽤⾃动增长类型,在创建表时只要指定表的主键为auto_increment,插⼊记录时,不需要再指定该记录的主键值,Mysql将⾃动增长;Oracle没有⾃动增长类型;2、第三⽅数据库管理⼯具 Mysql使⽤sql yog、Navicat for MySQL、MySQL Workbench(mysql 所在公司开发) Oracle使⽤PL/SQL 、 plus(oracle安装时⾃带)3、结果集⾏数限制-分页查询 Mysql使⽤limit关键字实现; Oracle使⽤ROWNUM关键字实现。

Oracle中ROWNUM不是某个表中的字段名,⽽是从⼀个表中查询数据时,oracle系统⾃动为查询结果返回的⾏按顺序的给出的编号; ORACLE写法如下: 3.1 rownum对于⼩于某值的查询条件的处理 3.2 rownum对于⼤于某值的查询条件的处理 可以使⽤⼦查询⽅法来解决,需要注意的是,⼦查询中的rownum必须要定义别名,因为rownum不是某个表的列,如果不给定别名的话,⽆法知道rownum是⼦查询的列还是主查询的列。

4、数据类型⽐较 4.1 Mysql中的set类型和enum类型,oracle不⽀持。

4.2 Oracle中的NUMBER类型,可以⽤来表⽰mysql中int型和decimal类型。

⽐如:DECIMAL就是NUMBER(10,2)这样的结构INT(10)就是是NUMBER(10),表⽰整型; MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不⼀样; 4.3 Oracle中的date类型,相当于mysql中的datetime类型5、多表查询全连接的区别 Mysql的全连接: 说明:mysql利⽤左连接和右连接分别查询出左右两边的数据, 然后利⽤union去掉两边都有的重复数据,并合并查询结果。

Oracle与MySQL的差异与迁移指南

Oracle与MySQL的差异与迁移指南

Oracle与MySQL的差异与迁移指南概述:Oracle与MySQL是两种广泛使用的关系型数据库管理系统(RDBMS)。

尽管它们都属于关系型数据库,但是在架构、功能和语法上存在一些明显的差异。

本文将探讨Oracle与MySQL之间的差异,并提供一些迁移指南,以帮助用户将其数据库从Oracle迁移到MySQL。

一、架构差异1. 数据库模型Oracle采用了客户端-服务器模型,其中数据库引擎和客户端应用程序在不同的计算机上运行。

而MySQL则采用了更简单的单一服务器模型。

2. 存储引擎Oracle内置了自己的多种存储引擎,如InnoDB、MyISAM、BDB等。

而MySQL则主要使用InnoDB和MyISAM两种存储引擎。

这些存储引擎在功能和性能上有所不同,需要根据具体需求选择。

3. 备份与恢复Oracle提供了强大且复杂的备份和恢复功能,如逻辑备份、物理备份、灾难恢复等。

而MySQL则相对简单,主要使用物理备份。

二、功能差异1. 事务处理Oracle提供了强大的事务处理功能,支持ACID(原子性、一致性、隔离性、持久性)特性,能够确保数据库的数据完整性和一致性。

MySQL也支持事务处理,但是在某些情况下可能需要手动设置事务隔离级别。

2. 触发器与存储过程Oracle支持复杂的触发器和存储过程语法,使得开发人员可以在数据库内部实现业务逻辑。

MySQL也支持触发器和存储过程,但是语法和功能相对简单。

3. 分区与分片Oracle支持表的分区和分片,可以将大型表分割成多个小片段,提高查询和维护的效率。

MySQL在某些版本中也开始支持分区和分片功能。

三、语法差异1. 数据类型Oracle的数据类型较为复杂,如NUMBER、VARCHAR2、DATE等,支持更多的数值和字符类型。

MySQL的数据类型相对较少,如INT、VARCHAR、DATETIME等。

2. SQL语法Oracle和MySQL在SQL语法方面存在一些差异。

mysql与ORACLE查询转换简单对比

mysql与ORACLE查询转换简单对比

ORACLE与MySql查询转换一、准备1)MySql和ORALCE表定义一致:create table t1(col1int primary key,col2int,col4int,col6int);2)ORACLE PL/SQL装载数据:declarev_count pls_integer:=0;beginfor ii in1..50000loopv_count:=mod(ii,21);dbms_output.put_line(v_count*3);insertinto t1(col1,col2,col4,col6)values(ii,ii*1,v_count*2,v_count*3);commit;end loop;end;3)MySql存储过程装载数据DELIMITER//CREATE PROCEDURE load_part_tab()begindeclare v int default0;while v<50000doinsert into part_tabvalues(v,v*1,v*2,v*3);set v=v+1;end while;end;//DELIMITER;二、实验过程测试对象:SELELCT语句。

对象内容:select*from t1where col1>45000and col1>49990;1)ORACLE测试过程:SQL*Plus:Release11.2.0.1.0Production on星期四7月3109:55:392014Copyright(c)1982,2010,Oracle.All rights reserved.连接到:Oracle Database11g Enterprise Edition Release11.2.0.1.0-Production With the Partitioning,OLAP,Data Mining and Real Application Testing optionsSQL>select*from t1where col1>45000and col1>49990;COL1COL2COL4COL6----------------------------------------49991112233499921224364999313263949994142842499951530454999616324849997173451499981836544999919385750000204060已选择10行。

oracle和mysql几点差异对比

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这个表(在同⼀语句中)。

Oracle和Mysql语法异同整理笔记

Oracle和Mysql语法异同整理笔记

Oracle和Mysql语法异同整理笔记@⽬录最近在做项⽬迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的函数,mysql并没有,所以就只好想⾃定义函数或者找到替换函数的⽅法进⾏改造。

所以本博客主要介绍Oracle兼容mysql改造⽅式以及注意事项,也就是介绍原本Oracle⼀些函数在Mysql的替换⽅法等等,适合给原本是Oracle版本的项⽬,想兼容Mysql版本。

(1) 模糊匹配Oracle的模糊匹配和mysql是不同的,在mybatis项⽬⾥,⽤Oracle,我们可能会这样写:where a like '%'|| #{参数} ||'%',不过放在mysql就不兼容了,mysql的做法是这样的where a like concat('%', #{参数} ,'%')(2) 删除数据⼀个⼩细节,在Oracle⾥删除数据,delete 表格 t where t.id = '?'或者delete from 表格 t where t.id = '?'不加关键字from或者⽤和不⽤别名t都是可以的,不过放在mysql5.X就不可以了,其它Mysql版本没验证过,Mysql版本要求必须加关键字from同时不能加别名delete from 表格 where id = '?'(3) 时间函数Oracle的时间函数和Mysql的时间函数是不同的,Oracle的格式是to_date('2019-02-12 14:20:22', 'yyyy-mm-dd hh24:mi:ss'),Mysql的格式是str_to_date('2019-02-12 11:34:32', '%Y-%m-%d %H:%i:%s')(4) 关键字问题在Oracle还是mysql建表的时候,⼀般都不要⽤数据库关键字做表的字段,⽐如Order,CONDITION等等,特别是mysql就直接报错。

使用ORACLE和MYSQL一些区别

使用ORACLE和MYSQL一些区别

使用ORACLE和MYSQL的一些区别
最近在在学习数据库,用到了ORACLE和MYSQL,其中ORACLE我在过去的工作中稍有接触,对于ORACLE也只是刚摸到门路,而对于MYSQL 只是听说他是一个开源项目,基本上算是没接触过。

这段时间二个数据库一起使用,难免会出现操作中混乱,我在这里大致归纳下我遇到最常见的问题。

1.在ORACLE中用select * from all_users显示所有的用户,而在MYSQL中显示所有数据库的命令是show databases。

对于我的理解,ORACLE 项目来说一个项目就应该有一个用户和其对应的表空间,而MYSQL项目中也应该有个用户和一个库。

在 ORACLE(db2也一样)中表空间是文件系统中的物理容器的逻辑表示,视图、触发器和存储过程也可以保存在表空间中。

而MYSQL并没有使用表空间来进行管理。

2.查询当前所有的表。

ORACLE: select * from tab,MYSQL:show tables。

3.改变连接用户(库)。

ORACLE:conn 用户名/密码@主机字符串,MYSQL:use 库名。

4.显示当前连接用户(库)。

ORACLE:show user,MYSQL:connect。

5.执行外部脚本命令。

ORACLE:@a.sql,MYSQL:source
a.sql。

数据库oracle与mysql在语法上的区别

数据库oracle与mysql在语法上的区别

数据库oracle与mysql在语法上的区别转⾃/huanghm88/article/details/8009048数据库oracle与mysql在语法上的区别不是很多,但是也有⼀些。

下⾯是部分参考:1,oracle没有offet,limit,在mysql中我们⽤它们来控制显⽰的⾏数,最多的是分页了。

oracle要分页的话,要换成rownum。

2,oracle建表时,没有auto_increment,所有要想让表的⼀个字段⾃增,要⾃⼰添加序列,插⼊时,把序列的值,插⼊进去。

3,oracle有⼀个dual表,当select后没有表时,加上的。

不加会报错的。

select 1 这个在mysql不会报错的,oracle下会。

select 1 from dual 这样的话,oracle就不会报错了。

4,对空值的判断,name != ""这样在mysql下不会报错的,但是oracle下会报错。

在oracle下的要换成name is not null5,oracle下对单引号,双引号要求的很死,⼀般不准⽤双引号,⽤了会报ERROR at line 1:ORA-00904: "t": invalid identifier⽽mysql要求就没有那么严格了,单引号,双引号都可以。

6,oracle有to_number,to_date这样的转换函数,oracle表字段是number型的,如果你$_POST得到的参数是123456,⼊库的时候,你还要to_number来强制转换⼀下,不然后会被当成字符串来处理。

⽽mysql却不会。

7,group_concat这个函数,oracle是没有的,如果要想⽤⾃已写⽅法。

8,mysql的⽤户权限管理,是放到mysql⾃动带的⼀个数据库mysql⾥⾯的,⽽oracle是⽤户权限是根着表空间⾛的。

9,group by,在下oracle下⽤group by的话,group by后⾯的字段必须在select后⾯出现,不然会报错的,⽽mysql却不会。

MySQL与Oracle的语法区别详细对比

MySQL与Oracle的语法区别详细对比

MySQL与Oracle的语法区别详细对⽐Oracle和mysql的⼀些简单命令对⽐1) SQL> select to_char(sysdate,'yyyy-mm-dd') from dual; SQL> select to_char(sysdate,'hh24-mi-ss') from dual; mysql> select date_format(now(),'%Y-%m-%d'); mysql> select time_format(now(),'%H-%i-%S'); ⽇期函数 增加⼀个⽉: SQL> select to_char(add_months(to_date ('20000101','yyyymmdd'),1),'yyyy-mm-dd') from dual; 结果:2000-02-01 SQL> select to_char(add_months(to_date('20000101','yyyymmdd'),5),'yyyy-mm-dd') from dual; 结果:2000-06-01 mysql> select date_add('2000-01-01',interval 1 month); 结果:2000-02-01 mysql> select date_add('2000-01-01',interval 5 month); 结果:2000-06-01 截取字符串: SQL> select substr('abcdefg',1,5) from dual; SQL> select substrb('abcdefg',1,5) from dual; 结果:abcdemysql> select substring('abcdefg',2,3); 结果:bcd mysql> select mid('abcdefg',2,3); 结果:bcd mysql> select substring('abcdefg',2); 结果:bcdefg mysql> select substring('abcdefg' from 2); 结果:bcdefg2) 在MySQL中from 后的表如果是(select.......)这种,那么后⾯必须有别名3) 连接字符串在Oracle中⽤|| ,SqlServer中⽤+,MySQL中⽤concat('a','b','c')4)在SqlServer中的写法:复制代码代码如下:declare @id varchar(50);set @id='4028e4962c3df257012c3df3b4850001';select * from sims_sample_detect where ID= @id;在MySQL中的写法:复制代码代码如下:set @a = 189;select * from bc_article where id = @a //不⽤declare在Orcale中的写法:5)MySQL存储过程:复制代码代码如下:DELIMITER $$DROP PROCEDURE IF EXISTS `SIMS`.`transaction_delSampleInfo`$$CREATE DEFINER=`root`@`%` PROCEDURE `transaction_delSampleInfo`(in sampleInfoId varchar(50)) BEGINstart transaction;update sims_sample_info set del='1' where ID = sampleInfoId;update sims_sample_detect set del='1' where SAMPLE_ID_PARENT = sampleInfoId;update sims_sample_detect_info set del='1' where DETECT_ID in(select ID from sims_sample_detect where SAMPLE_ID_PARENT = sampleInfoId);commit;END$$DELIMITER ;变量名不能跟列名相同,否则效果为1=1,且MySQL不区分⼤⼩写。

MySQL和Oracle的区别

MySQL和Oracle的区别

MySQL和Oracle的区别 由于SQL Server不常⽤,所以这⾥只针对MySQL数据库和Oracle数据库的区别(1) 对事务的提交MySQL默认是⾃动提交,⽽Oracle默认不⾃动提交,需要⽤户⼿动提交,需要在写commit;指令或者点击commit按钮(2) 分页查询MySQL是直接在SQL语句中写"select... from ...where...limit x, y",有limit就可以实现分页;⽽Oracle则是需要⽤到伪列ROWNUM和嵌套查询(3) 事务隔离级别MySQL是read commited的隔离级别,⽽Oracle是repeatable read的隔离级别,同时⼆者都⽀持serializable串⾏化事务隔离级别,可以实现最⾼级别的读⼀致性。

每个session提交后其他session才能看到提交的更改。

Oracle通过在undo表空间中构造多版本数据块来实现读⼀致性,每个session查询时,如果对应的数据块发⽣变化,Oracle会在undo表空间中为这个session构造它查询时的旧的数据块MySQL没有类似Oracle的构造多版本数据块的机制,只⽀持read commited的隔离级别。

⼀个session读取数据时,其他session不能更改数据,但可以在表最后插⼊数据。

session更新数据时,要加上排它锁,其他session⽆法访问数据(4) 对事务的⽀持MySQL在innodb存储引擎的⾏级锁的情况下才可⽀持事务,⽽Oracle则完全⽀持事务(5) 保存数据的持久性MySQL是在数据库更新或者重启,则会丢失数据,Oracle把提交的sql操作线写⼊了在线联机⽇志⽂件中,保持到了磁盘上,可以随时恢复(6) 并发性MySQL以表级锁为主,对资源锁定的粒度很⼤,如果⼀个session对⼀个表加锁时间过长,会让其他session⽆法更新此表中的数据。

MySQL和Oracle的区别

MySQL和Oracle的区别

MySQL和Oracle的区别
本质区别:
Oracle数据库是⼀个对象关系数据库管理系统(收费)
MySQL是⼀个开源的关系数据库管理系统(免费)
数据库的安全性:
mysql使⽤三个参数来验证⽤户,即⽤户名,密码和位置
Oracle使⽤了更多的安全功能,如⽤户名,密码,配置⽂件,本地⾝份验证,外部⾝份验证,⾼级安全增强功能等
⼀些语法上的区别:
主键:
mysql⼀般使⽤⾃动增长类型,在创建表的时候指定表的主键为auto increment,主键就会⾃动增长。

Oracle中没有⾃动增长,主键⼀般使⽤序列,插值时依次赋值即可。

引号问题:
Oracle不使⽤双引号,会报错
mysql则对引号没有限制
分页查询:
mysql分页查询使⽤关键字limit来实现
Oracle没有实现分页查询的关键字,实现起来较复杂,在每个结果集中只有⼀个rownum字段标明它的位置,并且只能⽤rownum<=某个数,不能⽤rownum>=某个数,因为ROWNUM是伪列,在使⽤时所以需要为ROWNUM取⼀个别名,变成逻辑列,然后来操作。

数据类型:
mysql中的整型:int(),字符串类型:varchar()
Oracle中的整形:number(),字符串类型:varchar2()
联系:⼤家都是数据库。

MySQL与Oracle差异比较之三函数

MySQL与Oracle差异比较之三函数

MySQL与Oracle差异⽐较之三函数函数编号类别ORACLE MYSQL注释1数字函数round(1.23456,4)round(1.23456,4)⼀样:ORACLE:select round(1.23456,4) valuefrom dualMYSQL:select round(1.23456,4) value2abs(-1)abs(-1)功能: 将当前数据取绝对值⽤法: oracle和mysql⽤法⼀样mysql: select abs(-1) value oracle: select abs(-1) value from dual3ceil(-1.001))ceiling(-1.001)功能: 返回不⼩于 X 的最⼩整数⽤法:mysqls: select ceiling(-1.001) value oracle: select ceil(-1.001) value from dual4floor(-1.001)floor(-1.001)功能: 返回不⼤于 X 的最⼤整数值⽤法:mysql: select floor(-1.001) value oracle: select floor(-1.001) value from dual5Max(expr)/Min(expr)Max(expr)/Min(expr)功能:返回 expr 的最⼩或最⼤值。

MIN() 和 MAX() 可以接受⼀个字符串参数;在这种情况下,它们将返回最⼩或最⼤的字符串传下。

⽤法:ROACLE: select max(user_int_key) from sd_usr;MYSQL: select max(user_int_key) fromsd_usr;6字符ascii(str)ascii(str)功能:返回字符串 str 最左边的那个字符的 ASCII 码值。

如果 str 是⼀个空字符串,那么返回值为 0。

如果 str 是⼀个 NULL,返回值也是 NULL.⽤法:mysql:select ascii('a') valueoracle:select ascii('a') value from dual7CHAR(N,...)CHAR(N,...)功能:CHAR() 以整数类型解释参数,返回这个整数所代表的 ASCII 码值给出的字符组成的字符串。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

msyql中没有TO_CHAR这样的通用格式转换函数,所以有几个几个不同的格式函数分开使用,我遇到最经常使用的为转换数字格式和转换时间格式:
1. oracle中的to_char(int, text), to_char(float, text), to_char(numeric, text)
作用:将各种类型的数据转换成特定的格式,其中text为想要转换成为的模板,例如9999.999等。

Mysql:format(number,int) ,其中int的值为想要保留的小数位数。

2. oracle中的TO_CHAR(date,yyyymmdd),
作用:将date类型的数据转换成固定格式的的字符串格式,其中yyyymmdd为想要转换成为的日期格式。

Mysql:date_formate(date,’%Y%m%d’)将时间类型字段格式为字符串格式
与上面那个函数功能正好相反的是str_to_date(string,,'%m.%d.%Y')函数,作用是将字符串类型字段格式为date数据,相当于oracle中的to_date函数。

oracle和mysql的星期返回:
oracle返回某个日期的星期值的写法是:
to_char(to_date(m.ldate,'YYYYMMDD')-1,'d') -- oracle 返回的是星期1到星期7
mysql 的改写方法为
DATE_FORMAT(m.date,'%w') WHEN 0 THEN 7 ELSE DATE_FORMAT'm.nextselldate,' %w') END -- msyql 返回的是星期1到星期0
说到时间,我们经常可以看到,在oracle数据库中把字段的默认值设为插入的当前时间,如:
alter table tablename add col date default sysdate
在mysql中获取当前时间的函数为now(),但是不支持将函数设为字段的默认值,所以我们可以使用timestamp来设置为默认时间,如:
Alter tablename add column
timestamp date DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTA MP
如果有需要的话,可以使用上面提到的date_format函数来将timestamp转换成合适的字符串。

格式如下:To_number(varchar2 or char,’format model’)
oracle中还有一个经常使用的格式转换函数就是to_number,作用是将一些处理过的按一定格式编排过的字符串变回数值型的格式。

其常用格式为:
to_number(varchar2 or char,’format model’)
在mysql中我们使用cast()来对这种情况进行处理,但要填适当的类型,例如:
cast(char as unsigned int) /*整型*/
cast(char as decimal(10,2)) /*浮点型*/
同时mysql中的cast()函数还能用取浮点型小数的整数部分,例如cast(-1.002 as int),这对应的是oracle中的trunc()函数。

相关文档
最新文档