MySQL与Oracle对比

前置吐槽

博主早年学的是oracle,但后期的学习中,感觉大部分视频教程mysql用的更加普遍,为了防止两大sql语言的混淆,特地写一篇有关两大数据库对比的博客,供大家参考。有问题可评论区一起探讨哈!

一.启动的区别

1.mysql只需要启动下面这个服务即可

在这里插入图片描述
登录数据库的语句是:mysql -u用户 -p密码(-hlocalhost -p3306 可以省去)
在这里插入图片描述

2.oracle一般是需要启动下面的两个服务:

在这里插入图片描述
登录数据库的语句是:sqlplus 用户/密码
在这里插入图片描述


二、数据库本质上的区别

1.数据库实例的不同

oracle默认只有一个数据库实例,而mysql需要自己创建的数据库实例,所以下面的语句是mysql独有的:

1.查看当前所有的数据库
show databases;
2.打开指定的库
use 库名
3.查看当前库的所有表
show tables;
4.查看其它库的所有表
show tables from 库名;
5.创建数据库
create database XXX;

注意!oracle查看数据库中所有表的语句并不是show tables;,而是下面的:select *from tab;

在这里插入图片描述

2.实现主键自增的区别:

mysql是支持自增的!

在这里插入图片描述
自增的方法是:

insert into A(name) values('xxx');

而oracle则需要通过序列来模拟自增

create sequence seq_a  start with 1 increment by 1;    --创建序列

create table A(
id number primary key,
name varchar2(20)
);    --创建表

实现自增的方法是:

insert into A values(seq_a.nextval,'xxx');

3.显示常量的方法不同

mysql:
在这里插入图片描述
oracle:
在这里插入图片描述

4.分页SQL的不同

mysql有独有的limit关键字:

SELECT * FROM  employees LIMIT 0,5;
SELECT * FROM  employees LIMIT 5;

而oracle是通过其自身独有的伪列+子查询来实现分页:

select * from(
	select rownum r,t.* from (
		select s.* from student s order by sno asc
	) t where rownum<=页面*页面大小
) where r>=(页数-1)*页面大小+1



三、函数的区别(关键)

1.字符函数的区别:

mysql的length()函数是获取字节数
oracle的length()函数是获取字符数的,通过lengthb()函数来获取字节数

2.日期函数的区别:

mysql的日期函数比较丰富:

#now 返回当前系统日期+时间
SELECT NOW();

#curdate 返回当前系统日期,不包含时间
SELECT CURDATE();

#curtime 返回当前时间,不包含日期
SELECT CURTIME();

#可以获取指定的部分,年、月、日、小时、分钟、秒
SELECT YEAR(NOW());
SELECT YEAR('1998-1-1');
SELECT  YEAR(hiredate)FROM employees;
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW());

#str_to_date 将字符通过指定的格式转换成日期
SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put;

#查询入职日期为1992--4-3的员工信息
SELECT * FROM employees WHERE hiredate = '1992-4-3';
SELECT * FROM employees WHERE hiredate = STR_TO_DATE('4-3 1992','%c-%d %Y');

#date_format 将日期转换成字符
SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;

#查询有奖金的员工名和入职日期(xx月/xx日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年') 入职日期
FROM employees
WHERE commission_pct IS NOT NULL;

oracle则不是:

--Sysdate:当前时间,注意这是关键字,后面不用跟()
select sysdate from dual;

--日期转字符
select to_char(sysdate,’yyyy-mm-dd’)from dual;

--字符转日期
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;

--Months_between(日期1,日期2):日期1-日期2  大的放左边  返回两月之差

--Add_months(日期,月数)  
select add_months(sysdate,12)  from dual;

--每个月的最大天数:last_day(日期)         
select last_day(syssdate) from dual;

--下一个星期n是哪一天:next_day(日期,n)
Select next_day(sysdate,’星期五’) from dual;//注意必须写星期几 不能写成周五

--Round(日期,‘时间单位(年|月|日)’):对(年|月|日)四舍五入;
Select round(sysdate,month),round(sysdate,year) from dual;

反正区别很大!我写的不是很完全,可以参考这个!

3.通用函数的比较

1.对null值的处理

mysql是借助IFNULL(a,b)函数,他等价于oracle的nvl(a,b)
–>当a为null时,返回b,当a不为null时返回a

但是oracle多了另一个函数nvl2(a,b,c):意思是当a为null的时候返回c,不是null时返回b

2.流程控制语句

mysql独有的是if()函数

#1.if函数: if else 的效果
SELECT IF(10<5,'大','小');

oracle独有的是decode()函数

--Decode(字段,条件1,返回值1,条件2,返回2,……,最后表达式)
select ename,job,sal 前,decode(job,'PRESIDENT',sal+1000,'MANAGER',sal+500,sal+300)from emp;
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

键盘歌唱家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值