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 99999999increment by 1start 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里面的映射字段的属性保持相同即可
更多相关文章
- 可以在SELECT语句中嵌入描述语法吗?
- 如何从MySQL DBs的不同表中提取create语句?
- MySQL 分区表 partition线上修改分区字段,后续进一步学习partitio
- mysql 同一表中.两个字段值互相复制,从一个字段值复制到另一个
- mysql查询一条工单时间需要10秒。优化sql语句得以解决。
- MySql SELECT 语句执行顺序
- MySQL 数据(字段)类型
- mysql中逗号分隔字段的更好替代方案
- MySQL 绿色版基本设置语句