Oracle和Mysql

Oracle和Mysql

開源性

Oracle是閉源且收費(fèi)

MySQL開源免費(fèi)

事務(wù)性

事務(wù):一組DML語句組成的工作單元

Mysql最早是不支持事務(wù)的,采取InnoDB引擎后支持事務(wù)

Mysql中事務(wù)默認(rèn)是自動(dòng)提交的(一條一提)

set auto_commit=false 關(guān)閉自動(dòng)提交

Oracle支持事務(wù)

SQL靈活性

Mysql是比較靈活,Oracle比較嚴(yán)格(分組校驗(yàn)性,沒有主鍵自增,Mysql沒有檢查性約束)

-- mysql 可以這么寫,但是結(jié)果有問題
select deptno,ename,max(sal)
from emp
where deptno is not null
group by deptno

-- oracle 不能這么寫,oracle要求,group by 中必須包含 select 中的所有非函數(shù)字段
select deptno,ename,max(sal)
from emp
where deptno is not null
group by deptno

約束

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

-- mysql 中枚舉類型可以達(dá)到類似效果
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 ('男','女'))
)

線程上的不同

主要體現(xiàn)在Linux系統(tǒng)上

Mysql是單進(jìn)程多線程的,單個(gè)Mysql服務(wù),可以同時(shí)登錄一個(gè)用戶

Oracle是多進(jìn)程的,單個(gè)Oracle服務(wù),可以通過切換不同用戶操作數(shù)據(jù)庫,但是不能同時(shí)登錄某一個(gè)用戶訪問

數(shù)據(jù)庫實(shí)例上的不同

Mysql用戶是基于實(shí)例的,當(dāng)實(shí)例創(chuàng)建完畢,用戶就已經(jīng)分配好了

Oracle必須先建庫,庫分配對(duì)象,對(duì)象訪問到的對(duì)象都是自己的,不能跨權(quán)

SQL方言

主鍵

mysql有主鍵自增

oracle沒有主鍵自增,oracle的主鍵是依賴 序列 完成的

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

-- 創(chuàng)建序列 : 生成主鍵,命名規(guī)范
create sequence test1_id -- 默認(rèn)是從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寫法,同時(shí)還有自己的寫法 (+)

-- 沒有員工的部門也顯示
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 關(guān)鍵字

select *
from emp
limit 0,10 -- 第一個(gè)參數(shù)0是查詢起始索引,第二個(gè)參數(shù)10是長度

oracle中采取 ROWNUM 偽列實(shí)現(xiàn)

-- 簡單使用
select rownum,empno,ename,sal
from emp
where rownum <= 5

-- 注意:它不能在 "本層" 查詢中使用 大于,大于等于或between..and 查詢,原因是rownum永遠(yuǎn)從1開始,所以需要嵌套,將查詢結(jié)果當(dāng)成普通數(shù)據(jù),就可以了
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優(yōu)化方案之一

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

出現(xiàn)在where條件中,查詢時(shí)加快查詢速度

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

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

主鍵唯一鍵自帶索引,不需要特意加索引

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 索引概念: 索引是關(guān)系數(shù)據(jù)庫中用于存放每一條記錄的一種對(duì)象,主要目的是加快數(shù)據(jù)的讀取速度和完整性檢查。建立索引...
    程序大視界閱讀 464評(píng)論 0 2
  • 索引概念: 索引是關(guān)系數(shù)據(jù)庫中用于存放每一條記錄的一種對(duì)象,主要目的是加快數(shù)據(jù)的讀取速度和完整性檢查。建立索引...
    程序大視界閱讀 828評(píng)論 0 3
  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲(chǔ)數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序。每個(gè)數(shù)據(jù)庫具有一個(gè)或多個(gè)不同的API,用于創(chuàng)建,訪問,管理...
    chen_000閱讀 4,132評(píng)論 0 19
  • 索引 數(shù)據(jù)庫中的查詢操作非常普遍,索引就是提升查找速度的一種手段 索引的類型 從數(shù)據(jù)結(jié)構(gòu)角度分 1.B+索引:傳統(tǒng)...
    一凡呀閱讀 3,201評(píng)論 0 8
  • MySQL技術(shù)內(nèi)幕:SQL編程 姜承堯 第1章 SQL編程 >> B是由MySQL創(chuàng)始人之一Monty分支的一個(gè)版...
    沉默劍士閱讀 2,635評(píng)論 0 3

友情鏈接更多精彩內(nèi)容