视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysql与oracle区别
2025-10-03 15:22:23 责编:小OO
文档
MySQL是遵守双重协议的,一个是GPL(General Public License,公共许可证)授权协议,一个是MySql AB制定的商用授权协议(注释:为解决其他企业用MySQL软件牟利或引用了MySQL的源代码而不想开源)。

参考: 遵守GPL协议的MySQL数据库 甲骨文是否有权收费?

(http://www.cnbeta.com/articles/187202.htm)

2008年1月SUN收购mysql, 2009年4月oracle收购sun。

MySQL根据收费与否,分为MySQL Community Server(即社区版)和MySQL Enterprise Edition(即商业版):

什么是 MySQL Community Server?

全球最流行的开源数据库,可免费下载,在开源GPL许可证之下可以自由的使用。但是Mysql不提供官方技术支持。

什么是MySQL商业版?

MySQL的收费版本,这是全球最流行的开源数据库最可靠、最安全的最新版本。

企业版和社区版区别?

一 mysql版本信息:

 目前在oracle官网能下载的最新版本是: MySQL Community Server 5.6.12

 各版本的差异请见:mysql各版本介绍

二mysql与oracle常用数据类型对照

Oracle

Mysql

描述
number(10)

int  bigint

int--存9位整数   bigint--存19位整数

number(7,2)

decimal(7,2)

varchar2varchar 

bloblongblob
charchar
datedate  datetimeDate以yyyy-mm-dd格式存储  

Datetime以yyyy-mm-dd hh:mi:ss格式存储

三 mysql与oracle的一些基本区别(NAME为表中字符串字段,BIR_DAY为日期类型字段)

比较项oraclemysql
1空串('')的判断

NAME IS NULL

NAME=''   OR

NAME ='  '  OR

NAME ='        ' OR

……

2fromSELECT 1 FROM DUAL

FROM是必须的

SELECT 1

FROM 不是必须的

3likeNAME like 'a%'

大小写敏感,只查询以小写字母a开头的字符串

NAME like 'a%'

大小写不敏感,查询以小写字母a或大写字母A开头的字符串

4日期根据时间参数查询:

BIR_DAY =

TO_DATE('2013-6-28', 'YYYY-MM-DD')

OR

BIR_DAY =

TO_DATE('2013-06-26 17:02:29', 'YYYY-MM-DD HH24:MI:SS')

__________________________当前日期时间:sysdate

转换函数:TO_DATE()  TO_CHAR()

根据时间参数查询:

BIR_DAY ='2013/06/28 00:00:00'

OR

BIR_DAY ='2013/06/28'

OR

BIR_DAY ='2013-06-28'

OR

BIR_DAY=STR_TO_DATE ('2013-06-28 00:00:00', '%Y-%m-%d %H:%i:%s')

--------------------

当前日期时间:now()  sysdate()

转换函数: str_to_date()  date_format()

5分页(常用写法)

SELECT T2.*

  FROM (SELECT T1.*, ROWNUM RN

          FROM (SELECT * FROM TEST ORDER BY SID DESC) T1

         WHERE ROWNUM < 5) T2

 WHERE RN >= 1

SELECT * FROM TEST_TEST1 ORDER BY SID DESC LIMIT 0,4

注:下标0开始

6主键Oracle序列:

SEQ_TEST.NEXTVAL

SEQ_TEST.CURRVAL

Auto_increment属性实现自增获得唯一值。

last_insert_id()函数可获得自增列自动生成的最后一个编号。

注:Insert时可令该列为null/0/不写该列,则该属性自动填充。

7字符串链接SELECT sid || username|| PASSWORD FROM TEST

SELECT concat(concat(sid , username), password) FROM TEST

SELECT CONCAT(SID , USERNAME, PASSWORD) FROM TEST
8组函数用法SELECT EMPNO,JOB, COUNT(1), SUM(SAL),SUM(COMM) FROM EMP;

以上SQL不能正常执行,select后面的列必须是分组的列或者是用了聚合函数的列 

SELECT EMPNO,JOB, COUNT(1), SUM(SAL),SUM(COMM) FROM EMP;

随便分组都可以

9分析函数row_number() over (partition by xx order by xx)

rank() over (partition by xx order by xx)

dense_rank() over (partition by xx order by xx)

count(1) over()

……

Mysql没有直接支持

10分区range分区、hash分区、list分区、

组合分区

range分区、hash分区、list分区、

key分区、组合分区

11

索引支持B树索引

支持B树索引

12

并行支持不明确
四 mysql与oracle数据库对象的区别

数据库对象oraclemysql
1procedureCREATE OR REPLACE PROCEDURE USP_UPD_TEST(P_NAME VARCHAR2, P_NEWSAL NUMBER) IS

BEGIN

    UPDATE EMP SET SAL=P_NEWSAL WHERE ENAME=P_NAME;

END;

说明:

(1)建存储过程用create procedure XXX 或 create or replace procedure  XXX 两种语法

(2)存储过程参数不能指定精度或长度,如P_NAME VARCHAR2

(3)参数后必须要有IS或AS

(4)存储过程没有参数时,()必须省略

(5)变量定义在is和begin之间,如:v_name varchar2(200);

CREATE PROCEDURE USP_UPD_TEST (P_NAME VARCHAR(100),P_NEWSAL DECIMAL(7,2)) 

BEGIN

    UPDATE EMP SET SAL=P_NEWSAL WHERE ENAME=P_NAME;

END;

说明:

(1)建存储过程只能用create procedure XXX一种语法

(2)存储过程参数必须指定精度或长度,如P_NAME VARCHAR(100)

(3)参数后不能有IS或AS

(4)存储过程没有参数时必须保留()

(5)变量定义在begin和end之间,如:declare v_name varchar(200);

2view支持支持
3Materialized view

支持
4tigger1 包含DML触发器(INSERT触发器、DELETE触发器、UPDATE触发器三种)、替代触发器(视图)、系统触发器(系统的启动关闭等)。

2 支持语句级触发器和行级触发器

3 取新值时用:NEW.USERNAME

  取旧值时用:OLD.USERNAME

4 CREATE TRIGGER TRIGGER_EMP AFTER INSERT OR UPDATE ON EMP

FOR EACH ROW

BEGIN

    语句;

END;

允许在一个trigger中,可以定义多个事件

5 调用存储过程时,如:

CREATE OR REPLACE TRIGGER trigger_emp AFTER INSERT OR UPDATE ON emp

FOR EACH ROW

BEGIN

   USP_INS_EMP();

END;

1 只有DML触发器(INSERT触发器、DELETE触发器、UPDATE触发器三种)

2 只支持行级触发器

3 取新值时用NEW.USERNAME

  取旧值时用OLD.USERNAME

4 CREATE TRIGGER TRIGGER_EMP AFTER INSERT ON EMP

FOR EACH ROW

BEGIN

    语句;

END;

一个trigger中只能定义一个事件

5 调用存储过程时,如:

CREATE TRIGGER TRIGGER_EMP2 AFTER UPDATE ON EMP2

FOR EACH ROW

BEGIN

    CALL USP_INS_EMP();

END;

5function支持支持
6package支持
7job支持比较完善支持比较简单,v5.1开始

8dblink支持
9sequence支持
10synonyms支持
11cursor1 静态游标(隐式游标,显示游标)、ref游标

2 支持loop循环,while循环,for循环

3 支持记录变量

4 支持bulk collection语法批量操作

LOOP

-- 填充数据批量填充,每次读取2条.

 FETCH c_test_main

 BULK COLLECT INTO test_data LIMIT 2;

1 只支持静态游标

2 支持loop循环,repeat循环,while循环

3 不支持记录变量

4 只能单条操作

12异常体系支持支持,但与oracle对异常处理方式差异比较大
五 mysql存储引擎比较(oracle没有存储引擎的概念):

MyISAM VS InnoDB性能测试:

数据量/单位:万

MyISAMInnoDB备注: my.cnf  特殊选项

插入:1w

3秒

219秒

innodb_flush_log_at_trx_commit=1 
插入:10w

29 秒

2092秒

innodb_flush_log_at_trx_commit=1 
插入:100w

287秒

N/Ainnodb_flush_log_at_trx_commit=1 
插入:1w

3秒

3秒

innodb_flush_log_at_trx_commit=0 
插入:10w

30秒

29秒

innodb_flush_log_at_trx_commit=0 
插入:100w

273秒

423秒

innodb_flush_log_at_trx_commit=0 
插入:1w

N/A 3秒

innodb_flush_log_at_trx_commit=0 

innodb_buffer_pool_size=256M 

插入:10W

N/A26秒

innodb_flush_log_at_trx_commit=0 

innodb_buffer_pool_size=256M 

插入:100W

N/A379秒

innodb_flush_log_at_trx_commit=0

innodb_buffer_pool_size=256M 

测试结果:

可以看出在MySQL 5.0里面,MyISAM和InnoDB存储引擎性能差别并不是很大,针对InnoDB来说,影响性能的主要是 

innodb_flush_log_at_trx_commit 这个选项,如果设置为1的话,那么每次插入数据的时候都会自动提交,导致性能急剧下降,应该是跟刷新日志有关系,设置为0效率能够看到明显提升,当然,同样你可以SQL中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。

同时也可以看出值得使用 InnoDB  来替代 MyISAM 引擎来进行开发,毕竟InnoDB 有多数据库特性、更良好的数据存储性能和查询性能下载本文

显示全文
专题