Heim  >  Artikel  >  Datenbank  >  Oracle与MySQL的使用比较

Oracle与MySQL的使用比较

WBOY
WBOYOriginal
2016-06-07 17:20:58881Durchsuche

在使用mysql一段时间以后,再次使用ORACLE时,首先想到的就是数据库名,在hibernate的 url 地址的设置中首先会牵涉到数据库名的使

Oracle与MySQL的使用比较总结:

用mysql与ORACLE有一段时间了,一直都没有做总结,今天有时间做些区别吧:

1.数据库的使用

在使用mysql一段时间以后,再次使用ORACLE时,首先想到的就是数据库名,在hibernate的 url 地址的设置中首先会牵涉到数据库名的使用,在ORACLE中,每个用户下只会有一个数据库名,这个也是在ORACLE 10g安装中,用户自己设置的,如果用户在后期的使用中,偶尔忘记自己所设置的数据库名,也可以在windows 中管理-服务中可以根据服务名字找到数据库的相应的名字(关于ORACLE此处查询数据库名,本人一直都没找到);

这一点在mysql中直接一个命令: SHOW DATABASES ;   会显示该用户下面的所有数据库。

2.组函数的使用

使用mysql时,没有牵涉到组函数的问题,mysql中组函数在select语句中可以随意使用,

eg: SELECT NAME, SUM(SALARY) FROM BOSS ;        // 会列出table的第一列与SUM相应的记录

  但在ORACLE中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group by子句中的列否则报错

eg: SELECT NAME, SUM(SALARY) FROM BOSS ;

 同样的查询语句,在mysql中不会出现问题,,但在ORACLE中会报错。

3.语句中的引号的区别

MYSQL里使用单引号包起字符串的同时,也可以用双引号包起字符串,但在ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

4.增长类型的区别

在建表的时候,MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,但需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。

eg:  CREATE SEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;

其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999

INSERT语句插入这个字段值为:序列号的名称.NEXTVAL

5.模糊查询的区别

  在java JDBC章节中,牵涉到模糊查询的操作。在mysql与oracle中,都可以使用 字段名 like %‘字符串%’的形式,但在oracle中这种方法的使用,在索引操作中速度方面会有所限制,解决方案:用字符串比较函数instr(字段名,‘字符串’)>0会得到更精确的查找结果。

6.空字符的处理

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

7.字符串的使用

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

8. 分页的SQL语句的处理

MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;PHP里还可以用SEEK定位到结果集的位置。

eg:SELECT * FROM TABLE_NAME LIMIT 10 ;

ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM80。以下是经过分析后较好的两种ORACLE翻页SQL语句(ID是唯一关键字的字段名):

语句一:

SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND NUMROW

语句二:

SELECT * FROM (( SELECT ROWNUM AS NUMROW, c.* from (select [FIELD_NAME,...] FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) c) WHERE NUMROW > 80 AND NUMROW

9.数据类型的比较

这个可以参考两者的基本类型比较的使用。

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn