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需要全部重新实现