刚进公司接触到了Oracle,记录一下他们的区别,面试的时候也有问到过,而且上来就是千万级别的数据调优,嘻嘻,我只是一个3年java。题外话,甚至有一些公司会问我java跟C、python的区别,以及具体区别的例子,然后我如果回答上来了,他们会告诉我,这边只做后端而且只用java,笑嘻了

就本人最近的使用和了解,整理了一下:

基本区别、大小写敏感、事务、时间日期、分页、常用字段类型

基本区别

数据库类型:

Oracle是对象关系数据库管理系统(ORDBMS => 基于对象模型,存储数据及其方法,数据存储在对象中,用于存储复杂的数据)

MySQL是开源的关系数据库管理系统(RDBMS => 基于关系模型, 存储数据,数据存储在实体里面,用于处理比较简单的数据)

默认端口和用户名:

Oracle默认端口:1521 默认用户:system
MySQL默认端口:3306 默认用户:root

安全:

Oracle使用了许多安全功能(本地身份验证,外部身份验证,高级安全增强等)

MySQL使用三个参数来验证用户,即用户名,密码和位置

性能:

MySQL在读取和写入方面性能通常比Oracle高

并发:

Oracle支持大并发访问量,是OLTP(联机事务处理 => 事务性非常高的系统,一般都是高可用的在线系统。比如银行、电商)最好的工具

MySQL并发小,面对大访问量可以做分表分库优化

临时表:

Oracle默认所有会话内可见(可设置当前会话内或事务内可见),创建后需要显式删除。

MySQL只在当前会话可见,一旦会话关闭就自动删除。

大小写敏感

Oracle默认是大写,在双引号""下,大小写敏感

MySQL默认是小写,大小写不敏感

事务

Oracle默认不自动提交,需要用户手动提交

提交命令:

BEGIN:事务块开始的标志(要么全部执行成功,要么全部失败回滚)
COMMIT:提交事务(对数据库的修改是可见的)
ROLLBACK:取消尚未提交的事务,将数据库恢复到事务开始之前的状态
SAVEPOINT:在事务中创建一个保存点,在事务执行过程中可以回滚到该保存点
SET TRANSACTION:设置事务的属性(事务的隔离级别、读写权限等)

MySQL中innoDB支持事务,默认自动提交(关闭事务提交命令 => set AutoCommit = 0)

提交命令:

START TRANSACTION:开始事务

COMMIT:手动提交

时间日期

Oracle使用 DATE 数据类型来存储日期和时间

# 获取当前DATE
SELECT SYSDATE
# 格式 'yyyy-mm-dd hh24:mi:ss' 
SELECT TO_CHAR(createDate, 'yyyy-mm-dd hh24:mi:ss') FROM tableName;

MySQL日期和时间通常使用 DATE,DATETIME,TIMESTAMP 数据类型存储

# 获取当前时间戳 
select unix_timestamp() 
# 获取当前日期 格式 'YYYY-MM-DD'
select date(now())
# 获取当前日期时间,格式 'YYYY-MM-DD hh:mm:ss' 
select now()

分页

Oracle

# rownum从1开始
select * from
(select rownum rn, t.* from (select * from tableName order by id desc) t )
where rn>=1 and rn<=5;

MySQL

# 从第0条开始,取5条数据
select * from tableName order by id desc limit 0,5

常用字段类型

Oracle MySQL
数字 NUMBER int、bigint、decimal
字符串 CHAR、NCHAR、VARCHAR2、NVARCHAR2 char、varchar
日期 DATE date、time、datetime、timestamp