Oracle和MySQL在SQL语句方面的区别
来源:互联网 发布:淘宝充值送优酷会员 编辑:程序博客网 时间:2024/06/08 12:12
因为公司的系统同时使用到了Oracle和MySQL数据库,经常在编写SQL时会遭遇不兼容问题,在此进行整理和总结。
1 数据类型
mysql
oracle
Note
int/double
number
数值型
varchar
varchar2
小文本型
text
varchar2
对于普通文本大于255,且小于4000的列
text
blob
对于大于4000的comment
longblob
blob
2 表
2.1 创建表(同)
create table tableName(
columnName1 int,
columnName2 int
)
2.2 删除表(异)
MySQL:
drop table if exists tableName
Oracle:
drop table tableName
注:Oracle没有if exists关键字,也没用类似if exists的SQL语法。
3 列
3.1 添加列(异)
MySQL:
A. alter table tableName add column columnName1 int;
B. alter table tableName add column columnName1 int, add column columnName2 int;
注:其中关键字column可有可无。
Oracle:
A. alter table tableName add columnName1 int;
B. alter table tableName add (columnName1 int);
C. alter table tableName add (columnName1 int, columnName2 int);
注:对于A,只有添加单列的时候才可使用,对于添加多列时需要使用C,不能像MySQL那样重复使用add column关键字。
3.2 删除列(异)
MySQL:
A. alter table tableName drop column columnName1
B. alter table tableName drop column columnName1, drop column columnName2
注:其中关键字column可有可无。
Oracle:
A. alter table tableName drop column columnName2
B. alter table tableName drop (columnName1)
C. alter table tableName drop (columnName1,columnName2)
注:对于A,只有删除单列的时候才可使用,对于删除多列时需要使用C,不能像MySQL那样重复使用drop column关键字。
3.3 修改列名(异)
MySQL:
alter table tableName change column columnNameOld columnNameNew columnType;
Oracle:
alter table tableName rename column columnNameOld to columnNameNew;
3.4 修改列类型(说明)
Oracle中,在列有数据的时候,无法修改列类型;没有数据时可以。
MySQL中,无论列是否有数据都可以修改列类型。
但是当有数据是,直接修改列类型都可能对数据造成丢失等,所以一般需要结合具体的业务来对列数据做处理后,再修改列类型类型。所以修改列的类型并非使用SQL语句进行一步到位的修改,而是通过以下流程:
A. 添加临时列
B. 将需要更改的列的值经过类型转换的验证后,赋值给临时列
C. 删除原有列
D. 将临时列的列名修改为原有列列名
4 索引
在整个数据库内,MySQL的索引可以同名,也就是说MySQL的索引是表级别的;但是Oracle索引不可以同名,也就是说Oracle的索引是数据库级别的。
4.1 创建索引(同)
create index indexName on tableName (columnName);
4.2 删除索引(异)
MySQL:
alter table tableName drop index indexName
Oracle:
drop index indexName
4.3 查询表的索引(异)
MySQL:
show index from tableName
Oracle:
select index_name, table_name, column_name from user_ind_columns where table_name=' tableName '
5 空字符串问题
Oracle中空字符串''就是null(也就是说,只有null,没有空字符),而MySQL是区分null和''的。
对于使用语句:select * from table1 where user_name <> ''来查询列user_name不为空(不为null且不为空字符)时,Oracle会查不出任何结果,而MySQL可以正常运行。这里MySQL之所以可以得到正确结果,还因为比较符号<>会先将列为null的内容进行过滤,然后再比较内容是否为空字符串。
这就要求一方面,以后在编写代码的时候,尽量保证不会往数据库插入空字符串''这样的值,要么保持有数据,要么保持为null。另外,对于MySQL中已经同时存在Null和''时,所有判断是否为null或者''的地方改为判断列的长度是否为0。
6 Left Join + Order By问题
对于以下SQL:
MySQL能够正确的被Order By进行排序,而Oracle则不行,必须要把放在第一个子查询中的Order By语句提取出来放到整个SQL的最后才可以,原因终于查清楚了:是因为使用了DISTINCT关键字的缘故,有这个关键字Order By里面的列必须出现在Select里面。
7 AS关键字
在为表名或者列名定义别名时,我们会使用到AS关键字:
上面的SQL在MySQL中能够正确运行,但是在Oracle中不能:因为Oracle中为表取别名时不需要也不能加AS关键字。
实际上在MySQL和Oracle中定义表或者列别名时,都可以不使用AS关键字,只要有一个空格即可:
- Oracle和MySQL在SQL语句方面的区别
- Oracle和MySQL在SQL语句方面的区别
- Oracle和MySQL在SQL语句方面的区别
- mysql和oracle在sql语句上的一些区别
- Oracle与MySQL的SQL语句区别
- oracle和db2的sql语句区别
- oracle和db2的sql语句区别
- MySQL、SQL Server 、 Oracle、Access的sql语句区别
- Oracle和MSSQL语句方面的比较
- Mysql和Oracle语句区别
- ORACLE和SQL SERVER的SQL语句中的一些区别
- MySQL和Sql Server的sql语句区别
- SQLserver和Oracle在执行语句方面的几点差异
- 我的oracle笔记一(sql语句方面)
- 我的oracle笔记一(sql语句方面)
- Oracle和SQL SERVER在SQL语句上的差别
- Oracle和SQL SERVER在SQL语句上的差别
- mysql和oracle的xml的sql语句互转
- Android内存泄露的总结
- Java综合考试总结
- CAS实现单点登录(SSO)经典完整教程
- SVN的客户端TortoiseSVN的安装及使用
- Log4j(二)----配置文件篇
- Oracle和MySQL在SQL语句方面的区别
- Linux下安装Tomcat
- 循环常见案例
- easyUI&ztree
- Codeforces 719B Anatoly and Cockroaches【思维】
- C++宏观导图
- 热门自然语言理解和语音API开发平台对比
- 19.实现单点触摸画圆
- linux 压缩解压命令