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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:   Oracle mysql 对比版本 Release 10.2.0.1.0 XE  windowsXP 5.

 

 

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

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路
|
19天前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
2月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
444 18
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
26天前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
|
1月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
37 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
2月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
318 2
|
1月前
|
Oracle 关系型数据库 MySQL
shell获取多个oracle库mysql库所有的表
请注意,此脚本假设你有足够的权限访问所有提到的数据库。在实际部署前,请确保对脚本中的数据库凭据、主机名和端口进行适当的修改和验证。此外,处理数据库操作时,务必谨慎操作,避免因错误的脚本执行造成数据损坏或服务中断。
38 0
|
3月前
|
Oracle 关系型数据库 MySQL
Mysql和Oracle数据库死锁查看以及解决
【8月更文挑战第11天】本文介绍了解决MySQL与Oracle数据库死锁的方法。MySQL可通过`SHOW ENGINE INNODB STATUS`查看死锁详情,并自动回滚一个事务解除死锁;也可手动KILL事务。Oracle则通过查询V$LOCK与V$SESSION视图定位死锁,并用`ALTER SYSTEM KILL SESSION`命令终止相关会话。预防措施包括遵循ACID原则、优化索引及拆分大型事务。
122 3
|
3月前
|
存储 SQL 运维
运维开发.MySQL.范式与反范式化
运维开发.MySQL.范式与反范式化
53 1
|
3月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
332 0

推荐镜像

更多
下一篇
无影云桌面