1) 数据类型差异
Oracle | MySQL | 注释 |
单独创建序列来实现 | 自动增长的数据类型 |
|
varchar2 | varchar |
|
number | tinyint,smallint,mediumint,int,bigint float,double |
|
clob | text,mediumtext,longtext |
|
date | datetime |
|
无 | enum |
|
raw | binary(n),varbinary(n) |
|
无 | bit(n) |
|
blob | blob,mediumblob,longblob |
|
2) 内建函数差异
Oracle | MySQL | 注释 |
length | char_length |
|
substr | substring |
|
nvl | ifnull |
|
decode | case |
|
to_char | date_format,time_format |
|
to_date | str_to_date |
|
trunc | cast |
|
to_number | cast |
|
date+/-n | date_add |
|
date1-date2 | datediff |
|
3) SQL语句差异
操作 | Oracle | MySQL |
创表指定表空间 | create table…tablespace x | 没有表空间,使用默认存储引擎 |
CTAS建表 | create table…as select…不能新增字段和改变字段属性 | create table t1(a int,b int) as select a,b,a,b from t2可以选择新的字段和字段属性 |
表结构复制 | create table t1 as select * from t2 where 1=0,只复制字段定义,不包括约束 | create table t1 like t2,复制包括约束 |
全局分区索引 | create index…global partition by | 无 |
重命名列 | alter table t1 rename c1 to c2 | alter table t1 change c1 c2 |
修改列类型 | alter table t1 modify c1 integer | alter table t1 change c1 c1 int |
修改列缺省值 | alter table t1 modify c1 default 0 | alter table t1 change c1 c1 int default 0 |
修改列非空 | alter table t1 modify c1 not null | alter table t1 change c1 c1 int not null |
重命名表 | rename t1 to t2 | alter table t1 rename t2 rename table t1 to t2 |
删除索引 | drop index idx1 | alter table t1 drop index idx1 drop index idx1 on t1 |
重命名索引 | alter index idx1 rename to idx2 | 删除重建 |
重建索引 | alter index idx1 rebuild | 无 |
禁用索引 | alter index idx1 unusable | 无 |
删除表 | drop table t1,如果表不存在报错 | drop table if exists t1,判断表是否存在,存在删除,不存在不报错 |
重命名视图 | rename v1 to v2 | rename view v1 to v2 |
左右连接 | select * from t1,t2 where t1.c1=t2.c2(+); select * from t1,t2 where t1.c1(+)=t2.c2; | select * from t1 left join t2 on t1.c1=t2.c2; select * from t1 right join t2 on t1.c1=t2.c2; |
交集 | select intersect select | select inner join select;使用inner join代替 |
差集 | Select minus select | select left join where,使用left join where代替 |
获取固定值 | select 1 from dual | select 1 |
字段连接 | select c1||c2 from t1 | select concant(c1,c2) from t1 |
结果子查询 | select * from (select * from t) | select * from (select * from t) t1 结果集需要有别名 |
Merge | merge into | replace into |
行号 | rownum | 无,需要使用用户变量来实现 |
分析函数 | max() over() min() over() …… | 无,需要自行实现 |
位图索引 | create bitmap index | 无 |
Top查询 | select * from (select rownum from t1 order by c1) where rownum>=1 and rownum<=5 | select * from t1 order by c1 limit 5 |
语句内部临时表 | with as | 无 |
创建存储过程/ | create or replace procedure | create procecure |
创建函数 | create or replace function | create function |
创建视图 | create or replace view | create view |
创建触发器 | create or replace trigger | create trigger |
创建包 | create or replace package | 无 |
创建用户 | create user u1 identified by p1 default tablespace x temporary tablespace y | create user u1 identified by p1 |
修改密码 | alter user u1 identified by p2 | mysqladmin -u u1 -p p1 password p2 |
大小写 | 不区分 | 缺省数据库、表名区分大小写,列名不区分; 可以设置lower_case_table_names=1都不分区 |
3) 子程序差异
Oracle中创建的匿名PL/SQL块、PL/SQL函数和存储过程,MySQL需要全部重新实现