mysql 和 oracle 的一些小知识
有很多应用项目, 刚起步的时候用MYSQL数据库基本上能实现各种功能需求,随着应用用户的增多,数据量的增加,MYSQL渐渐地出现不堪重负的情况:连接很慢甚至宕机,于是就有把数据从MYSQL迁到ORACLE的需求,这里就是非常直观的一个区别,oracle作为一个重量级别的数据库是mysql这种小型数据库在处理大量数据方面无法企及的,还有就是安全方面oracle也有着自己的优势,接下来总结一下两者的区别:
第一,首先我要将的就是对于空(null)的处理,在表结构中有些字段是用is not null 做控制的,在mysql中对于空是没有什么禁忌的,他是成人空这个值得,也就是说这个字符是有值得,这个值就是空,在这里我就想到了在java 中null 和 “”的区别,null就是空,没有引用地址,也没有值,但是“”这个玩意是有引用地址的,但是值是空的,也许我这么讲表达方式不对,欢迎来指导,接着说,在oracle中null是需要特别注意的,ORACLE里定义了非空字段就不容许有空的内容,所以如果使用mysql迁移到oracle中的时候你需要着重看一下null值得处理。
第二,就是字段的自增长,在mysql中字段是可以自增长的,你不用设置他的值,自动+1,在oracle中就不一样了,他没有自动增长的数据类型,如果有需要的话你需要设置一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。
CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999
INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL
第三,
MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不能用ROWNUM>80。
以下是经过分析后较好的一种ORACLE翻页SQL语句( ID是唯一关键字的字段名 ):
FROM TABLE_NAME
WHERE ID IN (
MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种方法不能使用索引, 速度不快,用字符串比较函数 instr(字段名,'字符串')>0 会得到更精确的查找结果。