最新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-10-08 02:25:51

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

数据库学习之--Oracle 架构与MySQL架构对比

数据库学习之--Oracle 架构与MySQL架构对比 一.Oracle .MySQL应用对比 如果要说明三者的区别,首先就要从历史入手. Oracle:中文译作甲骨文,这是一家传奇的公司,有一个传奇的大老板Larry Ellision. Ellision 32岁还一事无成,读了三个大学,没得到一个学位文凭,换了十几家公司,老婆也离他而去.开始创业时只有1200美元,却使得Oracle公司连续12年销售额每年翻一番. Oracle成立于1977年,早期的理论基础,反而来自于一篇IBM的论文<A

oracle转mysql总结

oracle转mysql总结 ares-sdk初始开发测试使用的是oracle数据库,由于宁波通商的特殊需要,必须把数据库环境从oracle转向mysql. 现对转换过程中出现的问题及经验总结如下: 主键生成策略 创建一个专门记录序列的表sequence,记录有当前序列号,序列的间隔如+1 创建记录当前序列的表 DROP TABLE IF EXISTS sequence; CREATE TABLE sequence ( name VARCHAR(50) NOT NULL, current_val

【最新】JAVA Spring mvc +mybatis(oracle 和 mysql) HTML5

说明:JAVA SpringMVC+mybatis(oracle 和 mysql) HTML5 全新高大尚后台框架 1.支持APP手机应用(android和ios)接口调用(json接口可与其它程序对接) 2.全新高大尚全HTML5+css3.0开发界面,美观漂亮时尚.前沿 3.有ORACLE 和MYSQL 版本各一个 4.框架搭建完善,在此基础上做过很多项目,身经百战,支持大并发,程序运行稳定 5.基础功能已经完善 组织管理:类似角色管理,分角色组和成员,有组权限和成员权限.菜单权限,独立分配

整理部分java代码和oracle,mysql,sql server对比数据类型

搜索了一下网上关于数据类型的对比,几乎没有三种数据库的对比,我就写了一些字段的对比,如果有不对的地方,请各位不吝指教. JAVA字段 oracle字段 mysql字段 sql server字段 int number int int java.lang.double number(p,s) double float java.lang.String varchar2 varchar varchar java.sql.Date date date ( year) datetime2 java.sql

oracle 转 mysql 最新有效法

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

数据库开发 Oracle与mysql间的批量处理接口 SSIS+存储过程实现

公司目前不同的业务系统用了不同的数据库,涉及到oracle.mysql.sqlserver.而一些核心的业务在mysql中,所以平时经常要把oracle.sqlserver中的数据插入到mysql中. 这部分最开始用的是 实时接口,java实现的,不过随着mysql里业务逻辑越来越多,数据量噌噌的增长,对实时接口的响应时不时的会出问题.所以决定改用批量处理接口,每2个小时传一次数据. 废话少说,我简化了其中一块接口,画了实现的流程图.从图中直接看出我用SSIS+存储过程实现的.SSIS只用来传数

近期使用Oracle数据库的一些吐槽(兼与MySQL的对比)

mysql 和 oracle (11g版本)的一些差异 mysql的写法比oracle自由很多,兼容性比较强 oracle的表名起别名不能用as,列的别名可以用as:mysql没有限制 oracle的日期时间只有两种类型,1date(精确到时分秒),2timestamp(更高精度) 而且,存储的时间格式比较怪,要转为习惯的格式的话,是这样的写的 to_char(date,'yyyy-mm-dd hh24:mi:ss') 对应的Java是这样的 yyyy-MM-dd HH:mm:ss 用了聚合函数

SpringMVC+mybatis(oracle 和 mysql) HTML5 全新高大尚后台框架

说明:JAVA SpringMVC+mybatis(oracle 和 mysql) HTML5 全新高大尚后台框架 bootstrap(可换皮肤) 1.支持APP手机应用(android和ios)接口调用 2.全新高大尚HTML5+css3.0+bootstrap开发界面UI,美观漂亮时尚.前沿(自动适配PC.平板.手机(需求微调)屏幕) 3.有ORACLE 和MYSQL ,Spring3.0,4.0版本各一个,一共4套版本全部提供的是源代码 4.框架搭建完善,在此基础上做过很多项目,身经百战,

oracle、mysql时区设置对timestamp的不同影响

因最近国际去Oracle上MySQL,这就不可避免的涉及到时区和timestamp问题.做一下实验,总结一下. Oracle 首先看下oracle concepts对timestamp的定义: The TIMESTAMP data type is an extension of the DATE data type. It stores fractional seconds in addition to the information stored in the DATE data type.