oracle和mysql的几点重要区别总结

最近,实际项目的开发中,将mysql迁移到了oracle,发现mysql与oracle在sql语句的处理上存在很大的差别,今天就两大数据库的差别做一下简要的总结:

总括:

1.oracle是大型数据库且价格昂贵;mysql是中小型数据库开源

2.oracle支持高并发,高吞吐量,是OLTP的最好的工具;mysql的之所以强大是由于内在的插件式存储引擎InnoDB引擎也支持OLTP,mysql的存储引擎是mysql的核心。

3.安装空间的占用不同:oracle在pc上安装后有好几个G且每次开启oracle服务器后,pc内存一下上升很多,导致pc很卡顿;mysql很轻量,安装后才200M左右。

4.目前,oracle的市场占有率相比mysql要大,但随着mysq开源且存储引擎的强大,mysql的市场占有率有上升的趋势,mysql在企业中使用率很普遍,甚至有的企业编写适合的自     己的mysql存储引擎来用。


下面,详细说下oracle,mysql在sql语句处理上存在的差别:

1.主键自增处理的差别:mysql中在创建表时指明字段为auto increment后,插入数据的时候就会自动增长,例如字段id为主键,在insert语句中如insert into user(id,name) values(null,"louis");这样表明要插入的id为自增字段;oracle中要用序列sequence来解决主键自增的问题,sql语句举例:create sequence sqe1 minvalue 1 maxvalue 99999999 increment by 1 start with 1;   /*表明步长为1,最小值为1,最大值为99999999的自增长的序列,序列名为sqe1*/,在insert语句中使用如insert into user(\"id\",\"name\") values(sqe1.nextval,"louis");/*这里的sql语句用到了字符转义,为什么要这样做下面会提到 */

2.单引号处理的差别:mysql中可用双引号包字符串;oracle中只能用单引号包字符串,在插入和修改字符串前必须把出现的一个单引号的替换成两个单引号。


oracle中sql语句错误总结:

1.多写逗号,如select stuId,stuName, from user; 运行 sql出现异常为Cause: java.sql.SQLException: ORA-00936: 缺失表达式

2.在mybatis框架中使用配置文件时,在sql语句多写一个分号,运行sql会出现 异常为Caused by: java.sql.SQLException: ORA-00911: 无效字符

3.\"id\" 异常为error code [17004]; 无效的列类型; nested exception is java.sql.SQLException

解决办法:\"id\"必须为大写\"ID\",字段名ID必须和数据库表中的字段名相同

注:oracle 中允许在sql文件中使用转义处理字符,若不处理会出现无效列类型的异常,这是由于id是oracle的关键字引起的

 /*查询oracle关键字的sql:SELECT * FROM  V$RESERVED_WORDS; */

4.出现异常为无效的列类型; nested exception is java.sql.SQLException java.sql.SQLException error code [17059] 无法转换为内部表示

原因:数据库里的字段类型与Java里映射该字段属性的类型不能对应转换,如数据库里字段类型为varchar,而Java定义的类型为int;或者数据库里为number,而Java定义的对应属性类型为String......)

解决办法:将数据库中的字段属性和java里面的映射字段的属性保持相同即可


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值