最近由于项目需要用上了oracle,几天感受下来感觉区别还是挺多的,方方面面,所以打算开一篇博,不详述,简单地持续更新。由于对Oracle不是很熟悉,如有错误谢谢指正:
1.MySQL是可以设置主键自增的,但在Oracle里想让主键自增要先选一个number类型字段作为主键,然后自己写序列和触发器,总之要自己动手。
2.两种数据库的索引类型都可选很多种,MySQL的默认引擎innoDB是可以选B+树作为索引数据结构的,在Oracle里好像没有引擎的概念,而且索引数据结构没有B+树,但是B-Tree还是有的。
3.虽然不建议在sql里用函数,但是两种数据库的sql函数使用好像也有区别,比如concat()拼接字符串函数,MySQL里是不限制拼接参数个数的,但是在Oracle里只能拼接两个,多了会报错。
4.Oracle字段类型没有boolean,一般用0和1区分。MySQL里看着好像是可以用bool和boolean表示布尔型字段,其实MySQL会自动转换成tinyint(1)的数据类型,默认值也就是1,0两种,分别对应了布尔类型的true和false,本质上和Oracle没什么区别。之前也用过PLSQL,这里面是实实在在地支持布尔型boolean的。
5.批量insert也有区别。
Oracle中的写法是:
INSERT ALL
INTO table_A(field_1,field_2) VALUES (value_1,value_2)
INTO table_A(field_1,field_2) VALUES (value_3,value_4)
INTO table_A(field_1,field_2) VALUES (value_5,value_6)
SELECT 1 FROM DUAL;
截个实例图,参数List元素类型为业务对象:
MySQL中的写法是:
INSERT INTO table_A(field_1,field_2) VALUES
(value_1,value_2),(value_3,value_4),(value_5,value_6)
6.关于数据库事务隔离级别,Mysql 默认采用的 REPEATABLE_READ(可重复读)隔离级别,Oracle 默认采用的 READ_COMMITTED(读已提交)隔离级别
7.关于where后条件执行顺序,MySql是从左往右,而Oracle是从右往左,也就意味着能筛选掉大部分数据的条件,在MySql中要写在最左边,而在Oracle中要写在最右边