最新Oracle 和 mysql 的对比参照----开发篇(转)

 


 


Oracle


mysql


对比版本


Release 10.2.0.1.0 XE  windowsXP


5.0.45-community-nt-log MySQL Community Edition (GPL)


当作计算器


SQL> select 1+1 from dual;


mysql> select 1+1;


mysql> select 1+1 from dual;


显示表结构


SQL> desc 表名


mysql> desc 表名;


SQL> describe 表名


mysql> describe 表名;

 
mysql> explain  表名;

注意:explain 也可以用来获取执行计划。


需要访问:

User_tables、user_tab_cols、USER_COL_COMMENTS、USER_INDEXES等等字典表。


mysql> show columns from 表名;


 


bin>mysqlshow 库名 表名


日期的概念


一个完全不同于字符串的类型。日期类型没有所谓的格式,日期就是日期,只有在显示的时候可以指定转换成的字符串的格式。绝对不会允许2008-00-00这种情况出现。对于日期转换为另一个日期相对比较简单,比如selecttrunc(sysdate) from dual;


可以方便的和字符串进行比较、转换 。允许0000-00-00这种情况出现作为null的替代品方便处理(个人不认为这样比较方便,反而给我造成困惑)。对于字符串转换为日期比较简单,比如CREATETABLE `datetime` (

 `dt` datetime NOT NULL default'0000-00-00 00:00:00',

  PRIMARY KEY  (`dt`)

);

INSERT INTO `datetime` VALUES('2008-01-01 00:00:00');

select * from `datetime`;


日期类型


date


datetime



Date

日期



Time

时间



Timestamp

如果表中其他字段变化,此类型的字段自动更新为当前系统时间。


Timestamp

保存了毫秒级别的时间


不清楚


日期函数


SQL> select trunc(sysdate) from dual;


mysql> select curdate();

mysql> select current_date;


SQL> select sysdate from dual;


mysql> select sysdate();


mysql> select now();


SQL> select to_char(sysdate,'HH24:Mi:SS') from dual;

注意此处返回结果为字符串,而不是日期类型。Oracle不提供和mysql中time类型相应的类型。


mysql> select current_time;

mysql> select curtime();

注意:此处返回的是time类型。就是时间17:22:14这种时间。Oracle中没有此类型。


毫秒级别:

SQL> select current_timestamp from dual;


需要使用函数MICROSECOND。目前还不会。


日期格式化


SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;


mysql> select date_format(now(),'%Y-%m-%d');


SQL> select to_char(sysdate,'hh24-mi-ss') from dual;


mysql> select time_format(now(),'%H-%i-%S');


日期函数

(增加一天)


SQL> select sysdate+1 from dual;

结果:2008-2-20 19:34:27


mysql> select date_add(now(),interval 1 day);


mysql>select now()+interval 1 day;


日期函数

(增加一个月)


SQL> select add_months(sysdate,1) from dual;

结果:2008-3-19 19:34:27


mysql> select date_add(now(),interval 1 month);


mysql>select now()+interval 1 month;


别名


SQL> select 1 as a from dual;


mysql> select 1 as a;


SQL> select 1 a from dual;


mysql> select 1 a;


字符串截取函数


SQL> select substr('abcdefg',1,5) from dual;

结果:abcde


mysql> selectsubstr('abcdefg',1,5);

结果:abcde


去除空格:

select trim('abc   ') from dual;


去除空格:

select trim('abc   ') fromdual;


字符串拼接:

SELECT CONCAT('a',' test') from dual;

结果:a test


SELECT CONCAT('a',' test');

结果:a test


注意oracle中||为字符串拼接

select 'a'||' test' from dual;

结果:a test


注意mysql中||为或操作符。

select 0||1;

结果1;

Select 0||0;

结果0。


判断是否包含:

select instr('abcd','bcd') from dual;

结果:2


mysql> SELECT INSTR('foobarbar', 'bar');

结果:4


另有正则表达式。


另有SUBSTRING_INDEX(str,delim,count)函数


执行sql脚本


SQL >@a.sql


1:mysql> source a.sql


执行外部shell脚本


SQL>host test.sh


目前还不会


SQL>! cd ..


改表名


SQL> alter table T rename to T1;


mysql> alter table t rename t1;


mysql> alter table T1 rename to  T;


执行命令


;<回车>


;<回车>


/


go


r


ego


run


 


distinct用法


SQL> select distinct 列1 from 表1;


mysql> select distinct 列1 from 表1;


SQL> select distinct 列1,列2 from 表1;


mysql> select distinct 列1,列2 from 表1;


注释


--


--


/* */


/*与*/


REM


#


限制返回记录条数为5条


SQL> select * from 表名 where rownum<=5;


mysql> select * from 表名 limit 5;


分页查询


select *

from (

select row_.*, rownum rownum_

from (

yourSqlHere ) row_

where rownum <= 100)

where rownum_ > 20;


select * from limit 20,100;


外连接


 (+)


left join


LEFT OUTER JOIN


left outer join


RIGHT OUTER JOIN


 


查询索引


SQL> select index_name,table_name from user_indexes;


mysql> show index from 表名 [FROM 库名];


通配符


“%”


“%”和“_”


如果存在则更新,否则插入


Merge into


Replace into

参见,mysql的replace没有oracle的merge严格:

http://www.bitbybit.dk/carsten/blog/?p=128#comment-50048


SQL语法


SELECT selection_list 选择哪些列


SELECT selection_list 选择哪些列


FROM table_list 从何处选择行


FROM table_list 从何处选择行


WHERE primary_constraint 行必须满足什么条件


WHERE primary_constraint 行必须满足什么条件


GROUP BY grouping_columns 怎样对结果分组

注意:oracle如果需要排序必须指定order by 子句。


GROUP BY grouping_columns 怎样对结果分组

注意:即使不存在order by子句,mysql也会按照group by 的列进行排序。甚至还能为group by 语句指定asc/desc子句。


HAVING secondary_constraint 行必须满足的第二条件


HAVING secondary_constraint 行必须满足的第二条件


ORDER BY sorting_columns 怎样对结果排序


ORDER BY sorting_columns 怎样对结果排序


Oracle的结果集限定语句见:”分页查询”

注意:oracle的rownum和mysql的Limit完全不同。


LIMIT count 结果限定


对not in null的处理,是关于三值逻辑的问题。


CREATE TABLE a

( code INT );

INSERT INTO a

     VALUES (2);

INSERT INTO a

     VALUES (NULL);

SELECT 1

  FROM DUAL

 WHERE 1 NOT IN (SELECT code  FROM a);

结果:无返回结果。


CREATE TABLE a

( code INT );

INSERT INTO a

     VALUES (2);

INSERT INTO a

     VALUES (NULL);

SELECT 1

  FROM DUAL

 WHERE 1 NOT IN (SELECT code FROM a);

结果:无返回结果


对not exists的处理


CREATE TABLE a

( code INT );

INSERT INTO a

     VALUES (2);

INSERT INTO a

     VALUES (NULL);

SELECT 1

  FROM DUAL

 WHERE NOT EXISTS (SELECT 1

                     FROM a WHERE a.code = 1);

结果:1


CREATE TABLE a

( code INT );

INSERT INTO a

     VALUES (2);

INSERT INTO a

     VALUES (NULL);

SELECT 1

  FROM DUAL

 WHERE NOT EXISTS (SELECT 1

                     FROM aWHERE a.code = 1);

结果:1


获取sql语句执行计划


SQL>EXPLAIN PLAN FOR   select * from t;

然后

SQL>select * from table(DBMS_XPLAN.DISPLAY)


Mysql> explain select * from t;


执行计划对照


全表扫描: TABLE ACCESS FULL


Type=all


Where条件过滤:FILTER


Extra=Using where


排序:SORT ORDER BY


Extra=Using filesort

   
   

事务管理


默认不自动提交


innoDB支持事务


默认自动提交autocommit


阻塞读取方式


 


 


Unique index的区别。

又是关于三值逻辑的问题。


CREATE TABLE hr.t (

   ID INT NOT NULL,

   DATA CHAR(30) DEFAULT NULL,

   UNIQUE (ID, DATA)

  );

 

INSERT INTO hr.t

     VALUES (1, NULL);

 

INSERT INTO hr.t

     VALUES (1, NULL);


mysql> CREATE TABLE t (

   ID INT NOT NULL,

   DATA CHAR(30) DEFAULT NULL,

   UNIQUE (ID, DATA)

  );

INSERT INTO t

     VALUES (1, NULL);

INSERT INTO t

     VALUES (1, NULL);

select * from t;

Query OK, 0 rows affected

Query OK, 1 row affected

Query OK, 1 row affected

+----+------+

| ID | DATA |

+----+------+

|  1 | NULL |

|  1 | NULL |

+----+------+

2 rows in set


ORA-00001: 违反唯一约束条件 (HR.SYS_C003999)

再次感谢yueliangdao0608对mysql内容的支持。

http://blog.csdn.net/fenixshadow/article/details/2106546

 

时间: 2024-11-01 16:19:36

最新Oracle 和 mysql 的对比参照----开发篇(转)的相关文章

Oracle 和 mysql 的一些简单命令对比参照

mysql|oracle Oracle 和 mysql 的一些简单命令对比参照 Oraclemysql对比版本Personal Oracle7 Release 7.3.4.0.0mysql 3.22.34-shareware-debug启动画面(点击放大)默认安装目录C:\ORAWIN95C:\MYSQL各种实用程序所在目录C:\ORAWIN95\BINC:\MYSQL\BIN控制台工具SVRMGR.EXESVRMGR23.EXEmysqladmin.exe数据库启动程序0start73.exe

Oracle和MySQL的一些简单命令对比

Oracle和MySQL的一些简单命令对比 SQL> select to_char(sysdate,'yyyy-mm-dd') from dual; SQL> select to_char(sysdate,'hh24-mi-ss') from dual; mysql> select date_format(now(),'%Y-%m-%d'); mysql> select time_format(now(),'%H-%i-%S'); 日期函数 增加一个月: SQL> selec

Vertica的这些事&amp;lt;六&amp;gt;—— SQL Server、Oracle、MySQL和Vertica数据库常用函数对比

SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 绝对值 S:select abs(-1) value O:select abs(-1) value from dual M:select abs(-1) value from dual V:select abs(-1) 向上取整 S:select ceiling(-1.001) value O:select ceil(-1.001) value from

Oracle和MySQL的高可用方案对比(一)

关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说.通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识.Oracle有一套很成熟的解决方案.用我在OOW上的ppt来看,是MAA的方案,今年是这个方案的16周年了. 而MySQL因为开源的特点,社区里推出了更多的解决方案,个人的见解,InnoDB Cluster会是MySQL以后的高可用方案标配. 而目前来看,MGR固然不错,MySQL Cluster方案也有,PXC,Galera等方案,个人还

oracle 转 mysql 最新有效法(转)

关键字:Oracle 转 MySQL . Oracle TO MySQL 没事试用了一下Navicat家族的新产品Navicat Premium,他集 Oracle.MySQL和PostgreSQL管理如一体,个人感觉很强悍(感觉速度很快)! 突发奇想,Oracle能不能导入 MySQL呢?先试试看: 1)新建了一个Oracle连接和MySQL连接2)工具 -> 数据传输(如下图)3)点开始,导入尽然开始了导入完毕,看看导入的效果,非常棒,但是也存在一些问题,需要手动改动:1)Oracle自动增

行成于思:从Oracle到MySQL

这篇文章来自于微信群的问答,我和周彦伟互相配合,彦伟回答了我的四个关于MySQL和Oracle的问题,对于来自两个不同领域的人,这些问题我想对很多人具备参考价值.整理收录于此,供参考. 1.用户该选择怎样的MySQL? 盖国强问:随着Oracle囊括MySQL而去,用户对于MySQL命运的担忧从未停止,然而官方版本的各种特性确实在不断增强,从GTID到MTS,Oracle解决了MySQL的很多历史问题,同时诸如MariaDB等新的分支又激活了开源的引擎,Oracle官方分支与其他分支相比,是否具

【2017DTC精彩重现】Oracle和MySQL DBA的进阶之路

分享的初衷 这个是参考了朱赟[yūn]的一段话,我觉得已经很透彻形象了,毕竟在短短的几十分钟里,你只能得到一些思想上的建议和思路,落到实处还是得靠自己.而参考和借鉴的过程也是自己修行的过程.第二句我关于坚持,有的同学说坚持是习惯,有的说是毅力,本质上来说,还是坚持的态度,是坚持做一件事情,还是坚持把一件事情做好,两者听起来相似,实则有很大的差别. 分享思路 我分了几个层面来做了一些解读.在本文中会抽取重点列出一些来. Oracle和MySQL的学习周期 其实正如我开篇所说,目前国内的使用有两个比

oracle与mysql

问题描述 谁可以告诉我oracle与mysql的区别是什么?谢谢! 解决方案 解决方案二:飞机与汽车的区别解决方案三:火车与自行车的区别解决方案四:Oracle是企业级数据库市场占有率最高的数据库管理系统MySQL是使用最为广泛的开源数据库管理系统这两个根本不在同一个档次上,没办法比.解决方案五:区别大了,不在一个等量级1.安全性:不管是mysql,还是mssql,在外部网络中,都受到相当大的威胁.相比而言,mssql受到的威胁甚至要更大些,最近2年来,mssql暴露出了多个远程溢出漏洞.如果配

MySQL 8.0.0开发里程碑版发布!_Mysql

MySQL 开发团队于 12 日宣布 MySQL 8.0.0 开发里程碑版本(DMR)发布! 可能有人会惊奇 MySQL 为何从 5.x 一下跳跃到了 8.0.事实上,MySQL 5.x 系列已经延续了很多年,从被 Oracle 收购之前就是 5.1,而收购之后一直维持在 5.x,比如 5.5,5.6,5.7 等等.其实,如果按照原本的发布节奏,可以把 5.6.x 当成 6.x,5.7.x 当成 7.x.所以,只是换了版本命名方式而已. 不过这次发布的 MySQL 8.0.0 开发版本还是有不少