最新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 t 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严格: |
|
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
最新Oracle 和 mysql 的对比参照----开发篇(转)的更多相关文章
- Oracle和MySQL的对比
一.概述 1.1 Oracle 1.1.1 优点 开放性:Oracle 能所有主流平台上运行(包括 windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持: 可伸缩 ...
- oracle转mysql总结
oracle转mysql总结 ares-sdk初始开发测试使用的是oracle数据库,由于宁波通商的特殊需要,必须把数据库环境从oracle转向mysql. 现对转换过程中出现的问题及经验总结如下: ...
- oracle和mysql几点差异对比
Oracle与mysql差异性总结 之前有个项目是用oracle数据库进行开发,需要把数据库改成mysql,遇到了一些地方需要注意的,就简单记了下来. 备注: 再把oracle转成mysql的时候,表 ...
- 【转】SQL Server、Oracle、MySQL和Vertica数据库常用函数对比
SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 1. 绝对值 S:select abs(-1) valu ...
- Oracle和MySQL的高可用方案对比【转】
关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说.通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识.Oracle有一套很成熟的解决方案.用我在 ...
- Oracle与MySQL的区别对比
本文对数据库Oracle与MySQL进行了区别对比,其中从并发性.一致性.事务.数据持久性等十三方面进行了对比. 本文摘自 51cto 一.并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源 ...
- Vertica的这些事(二)——SQL-Server、Oracle、MySQL和Vertica数据库常用函数对比
SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 绝对值 S:select abs(-1) value O ...
- oracle 转 mysql 最新有效法(转)
关键字:Oracle 转 MySQL . Oracle TO MySQL 没事试用了一下Navicat家族的新产品Navicat Premium,他集 Oracle.MySQL和PostgreSQL管 ...
- oracle和mysql批量合并对比
orm框架采用mybatis,本博客介绍一下批量合并merge用oracle和mysql来做的区别, oracle merge合并更新函数的详细介绍可以参考我以前的博客:https://blog.cs ...
随机推荐
- Ios 该图显示其出现的相关问题定义UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
解决这个问题 在 加上个 标示符 Cell 自己定义 customCell .h 代码例如以下 ViewController.m 文件里 代码例如以下 执行结果 吕 图坚持直接在这里 不行
- awk与sed:关于多行的样本
几天前CSDN看到一个帖子http://bbs.csdn.net/topics/390848841,楼主贴了以下的问题: 例: 12345 67890 1234567890 123 4567890 怎 ...
- unity3D实际的原始视频游戏开发系列讲座12之U3D的2D为了开发实战的新方法
U3D的2D为了开发实战的新方法 (Unity3d-4.x的打飞机2D游戏开发新的方法应用 ) 大纲介绍:不使用NGUI和TK2d插件, 使用 U3D内置强大的最大的工具. 开发过程设计到例 ...
- Java RMI(远程方法调用) 实例与分析
目的: 通过本文,可以加深对Java RMI的理解,知道它的工作原理,怎么使用等. 也为了加深我自己的理解,故整理成文.不足之处,还望指出. 概念解释: RMI(RemoteMethodInvocat ...
- Shrio登陆验证实例详细解读(转)
摘要:本文采用了Spring+SpringMVC+Mybatis+Shiro+Msql来写了一个登陆验证的实例,下面来看看过程吧!整个工程基于Mavevn来创建,运行环境为JDK1.6+WIN7+to ...
- Thinkphp编辑器扩展类kindeditor用法
一, 使用前的准备. 使用前请确认你已经建立好了一个Thinkphp站点项目. 1,Keditor.class.php和JSON.class.php 是编辑器扩展类文件,将他们拷贝到你的站点项目的Th ...
- 图表引擎AChartEngine 二
这几天项目涉及到android图表绘制,网上找的Demo都是大同小异,也就如上篇博文所写的一样是基本函数的实现.可是所有能找到的Demo都和设计图不符.木有办法,Leader发话啦,万不得已的情况下不 ...
- Android利用网络编程HttpClient批量上传(一个)
请尊重他人的劳动成果.转载请注明出处:Android网络编程之使用HttpClient批量上传文件 我曾在<Android网络编程之使用HTTP訪问网络资源>一文中介绍过HttpCient ...
- CSS十问——好奇心+刨根问底=CSSer (转)
最近有时间,想把酝酿的几篇博客都写出来,今天前端小学生带着10个问题,跟大家分享一下学习CSS的一些体会,我觉得想学好CSS,必须保持一颗好奇心和刨根问底的劲头,而不是复制粘贴,得过且过.本人能力有限 ...
- Linux lspci查看硬件设备
Linux 主机的硬件配备 lspci 找到的是眼下主机上面的硬件配备 [root@www ~]# lspci [-vvn] 选项与參数: -v :显示很多其它的 PCI 接口装置的具体信息 ...