Oracle和Mysql

Oracle和Mysql

开源性

Oracle是闭源且收费

MySQL开源免费

事务性

事务:一组DML语句组成的工作单元

Mysql最早是不支持事务的,采取InnoDB引擎后支持事务

Mysql中事务默认是自动提交的(一条一提)

set auto_commit=false 关闭自动提交

Oracle支持事务

SQL灵活性

Mysql是比较灵活,Oracle比较严格(分组校验性,没有主键自增,Mysql没有检查性约束)

-- mysql 可以这么写,但是结果有问题
select deptno,ename,max(sal)
from emp
where deptno is not null
group by deptno

-- oracle 不能这么写,oracle要求,group by 中必须包含 select 中的所有非函数字段
select deptno,ename,max(sal)
from emp
where deptno is not null
group by deptno

约束

Mysql支持主键,唯一键,非空,外键

-- mysql 中枚举类型可以达到类似效果
create table student2222(
id int(5),
name varchar(50),
gender enum('男','女'),
primary key(id)
)

Oracle支持主键,唯一键,非空,外键,检查性约束

-- oracle 中支持检查性约束
create table student1(
id number(5),
name varchar2(50),
gender varchar2(10),
primary key(id),
check (gender in ('男','女'))
)

线程上的不同

主要体现在Linux系统上

Mysql是单进程多线程的,单个Mysql服务,可以同时登录一个用户

Oracle是多进程的,单个Oracle服务,可以通过切换不同用户操作数据库,但是不能同时登录某一个用户访问

数据库实例上的不同

Mysql用户是基于实例的,当实例创建完毕,用户就已经分配好了

Oracle必须先建库,库分配对象,对象访问到的对象都是自己的,不能跨权

SQL方言

主键

mysql有主键自增

oracle没有主键自增,oracle的主键是依赖 序列 完成的

-- 主键没有自增,使用序列完成
create table test1(
id number(9),
name varchar2(50),
primary key(id)
)

-- 创建序列 : 生成主键,命名规范
create sequence test1_id -- 默认是从1开始,每次递增1

insert into test1 (id,name) values (test1_id.nextval,'bob')

-- 具体语法
create sequence test1_id2
[start with 50]
[increment by 2]
[maxvalue 999999]
[minvalue 1]
[cycle]
[cache 20]

外部连接(左连接,右连接,自连接,全外连接)

mysql 中左连接写法

-- 没有员工的部门也显示
select ename,sal,d.deptno,dname
from dept d
left join emp e
on e.deptno = d.deptno
-- 没有部门的员工也显示
select ename,sal,d.deptno,dname
from emp e
left join dept d
on e.deptno = d.deptno

oracle中也支持上面这种mysql写法,同时还有自己的写法 (+)

-- 没有员工的部门也显示
select ename,sal,d.deptno,dname
from dept d
left join emp e
on e.deptno = d.deptno
-- 没有部门的员工也显示
select ename,sal,d.deptno,dname
from emp e
left join dept d
on e.deptno = d.deptno

-- 没有员工的部门也显示
select ename,sal,d.deptno,dname
from dept d,emp e
where e.deptno(+) = d.deptno

-- 没有部门的员工也显示
select ename,sal,d.deptno,dname
from dept d,emp e
where e.deptno = d.deptno(+) 

oracle中支持全外连接,Mysql中不支持

select ename,sal,d.deptno,dname
from dept d
full join emp e
on e.deptno = d.deptno

分页

mysql中分页采取 limit 关键字

select *
from emp
limit 0,10 -- 第一个参数0是查询起始索引,第二个参数10是长度

oracle中采取 ROWNUM 伪列实现

-- 简单使用
select rownum,empno,ename,sal
from emp
where rownum <= 5

-- 注意:它不能在 "本层" 查询中使用 大于,大于等于或between..and 查询,原因是rownum永远从1开始,所以需要嵌套,将查询结果当成普通数据,就可以了
select e.* 
from (select rownum rn1,empno,ename,sal
     from emp
     where rownum < 11) e
where rn1 > 5

-- 有排序
select rownum,e.*
from (select empno,ename,sal
     from emp
     order by sal desc) e
where rownum < 6

-- 有排序,又有分页
select a.*
from (select rownum rn1,e.*
     from (select empno,ename,sal
          from emp
          order by sal desc) e
     where rownum < 11) a
where rn1 > 5

索引(index)

加快查询速度,SQL优化方案之一

-- 简单索引
CREATE TABLE indexTest1(
`id` int(9),
`name` varchar(50),
index(`name`)
)

出现在where条件中,查询时加快查询速度

select *
from emp
where ename like 'S%' -- 索引有效

select *
from emp
where ename like '%S%' -- 索引无效

主键唯一键自带索引,不需要特意加索引

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

  • 索引概念: 索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引...
    程序大视界阅读 416评论 0 2
  • 索引概念: 索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引...
    程序大视界阅读 764评论 0 3
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,034评论 0 19
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 2,891评论 0 8
  • MySQL技术内幕:SQL编程 姜承尧 第1章 SQL编程 >> B是由MySQL创始人之一Monty分支的一个版...
    沉默剑士阅读 2,418评论 0 3