我是靠谱客的博主 动人月饼,最近开发中收集的这篇文章主要介绍oracle与mysql常用区别整理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、批量新增 2

二、批量修改 3

模糊查询 3

、无效字符 4

五、日期 5

六、获得当前主键操作 6

、字段类型的区别 7

八、单引号的处理 10

九、翻页的SQL语句的处理 10

十、长字符串的处理 10

十一、空字符的处理 11

 

一、批量新增

mysql中支持insert into xxx values (?,?),(?,?) 。例如:

<insert id="saveEntity" parameterType="java.util.List">
insert into role_model (RM_MODELID,RM_ROLEID) values 
<foreach collection="list" item="item" index="index" separator=",">
(#{item.modelId},#{item.roleId}) 
</foreach>
</insert>

但是在oracle中要这样写:insert  into  xxx  select ?,? from dual union all  select ?,? from dual union all select ?,? from dual 。例如:

<insert id="saveEntity" parameterType="java.util.List">
insert into role_model (RM_MODELID,RM_ROLEID) 
<foreach collection="list" item="item" index="index" separator="union all">
select #{item.modelId},#{item.roleId} from dual
</foreach>
</insert>

 区别总结:

1mysqlvaluesoraclevalues

2mysqlseparator是逗号“,”oracleseparator“union all”

3mysql是(?,?),oracleselect ?,? from dual

 

二、批量修改

mysql写法:

注:mysql数据库连接需要加上&allowMultiQueries=true


例如:jdbc:mysql://192.168.1.236:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true


<update id="updatebatch"  parameterType="java.util.List">

  <foreach collection="list" item="item" index="index" open="" close="" separator=";">

update table_name 

      <set >

        <if test="item.status != null" >

          status = #{item.status,jdbcType=INTEGER}

        </if>

     </set>

where id = #{item.id,jdbcType=BIGINT}

</foreach>

 </update>

oracle写法:

注:这样的写法虽然可以更新,但是更新操作返回值是-1,并没有返回更新的行数

<update id="updatebatch"  parameterType="java.util.List">

  <foreach collection="list" item="item" index="index" open="begin" close="end;" separator=";">

update table_name 

    <set >

      <if test="item.status != null" >

        status = #{item.status,jdbcType=INTEGER}

      </if>

    </set>

    where id = #{item.id,jdbcType=BIGINT}

  </foreach>

 </update>

区别总结:

mysql的标签中openclose都是””oracleopen=begin”,close=”end;”

 

三、模糊查询

mysql中支持concat ( '%',#{roleName},'%')。例如:

<select id="query" resultMap="resultMap">
select * from role  
<where>
<if test="roleName != null and roleName != ''">and ROLE_NAME like concat ( '%',#{roleName},'%') </if>
</where>
order by ROLE_ID desc
</select>

oracle中却要这样写: '%'||#{roleName}||'%' 。例如:

<select id="query" resultMap="resultMap">
select * from role  
<where>
<if test="roleName != null and roleName != ''">and ROLE_NAME like '%'||#{roleName}||'%' </if>
</where>  
order by ROLE_ID desc
</select>

 区别总结:

mysqlxml使用concat函数进行字符串的拼接oracle使用“||”进行字符串的拼接。

 

四、无效字符

mysql

<insert id="saveuser" parametertype="userentity" >
insert into c_user (id,login_name,password,email)
values (#{id},#{loginname},#{password},#{email});
</insert>

oracle

<insert id="saveuser" parametertype="userentity" >
insert into c_user (id,login_name,password,email)
values (#{id},#{loginname},#{password},#{email})
</insert>

 区别总结:

mysqlxml中可以加分号在最后面,但是oracle不可以。

五、日期

mysql

返回系统日期,输出 2009-12-25 14:38:59  

select now();  

输出 09-12-25  

select date_format(now(),'%y-%m-%d');  

获得当前 UTC 日期时间函数:utc_date(), utc_time(), utc_timestamp()  

当前时间减去7分钟的时间 :select date_sub(now(),interval 7 minute);  

获取时间戳:select unix_timestamp('2008-08-08'); -- 1218124800  

oracle

获取系统日期:  SYSDATE()  

格式化日期:     TO_CHAR(SYSDATE(),'YY/MM/DD HH24:MI:SS')  

返回系统日期,输出 25-12-09  

select sysdate from dual;  

mi是分钟,输出 2009-12-25 14:23:31  

select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;  

当前时间减去7分钟的时间   

select sysdate,sysdate - interval '7' MINUTE from dual;   

获取时间戳:SELECT (SYSDATE - TO_DATE('1970-1-1 8','YYY-MM-DD HH24'))*86400 FROM DUAL;  

六、获得当前主键操作

mysql:
<insert id="insert" parameterType="Role" useGeneratedKeys="true" keyProperty="roleId">
    insert into role (name, create_time, update_time) values (#{name,jdbcType=VARCHAR}, now(), now())
</insert>

oracle

在执行插入之前,需要创建一个序列:

create sequenceseq _LSP_ROLE      

minvalue 1

       maxvalue 9999999999999999999999999999

       start with 1

       increment by 1

       cache 20;
<insert id="insert" parameterClass="ROLE">
<selectKey resultType="java.lang.Long" order="AFTER" keyProperty="roleId">  
       SELECT seq_LSP_ROLE.currval as ROLEID from DUAL  
  </selectKey>
 insert into ROLE(ID, NAME, CREATE, MODIFY) values (#{id}, #{name}, sysdate, sysdate)
</insert>

 

 区别总结:

mysql在插入是不需要主键而是在插入过程中自动获取一个自增的主键,不同的是oracle在执insert sql前必须指定一个主键值给要插入的记录。

七、字段类型的区别

mysql    bigint 

 oracle     numeric()因为oracle没有bigint类型

 

 

比版本

Personal Oracle7 Release 7.3.4.0.0

mysql 3.22.34-shareware-debug

 

安装后系统默认用户(库)

sys
system
scott

mysql
test

 

显示所有用户(库)

SQL >select * from all_users;

C:mysqlbin>mysqlshow
C:mysqlbin>mysqlshow –status
mysql> show databases;

 

退出命令

SQL> exit
SQL> quit

mysql> exit
mysql> quit

 

改变连接用户(库)

SQL> conn 用户名/密码@主机字符串

mysql> use 库名

 

查询当前所有的表

SQL> select * from tab;
SQL> select * from cat;

mysql> show tables;
c:mysqlbin>mysqlshow 库名

 

显示当前连接用户(库)

SQL> show user

mysql> connect

 

查看帮助

SQL> ?

mysql> help

 

显示表结构

SQL> desc 表名
SQL> describe 表名

mysql> desc 表名;
mysql> describe 表名;
mysql> show columns from 表名;
c:mysqlbin>mysqlshow 库名 表名

 

日期函数

SQL> select sysdate from dual;

mysql> select now();
mysql> select sysdate();
mysql> select curdate();
mysql> select current_date;
mysql> select curtime();
mysql> select current_time;

 

日期格式化

SQL> select to_char(sysdate,’yyyy-mm-dd’) from dual;
SQL> select to_char(sysdate,’hh24-mi-ss’) from dual;

mysql> select date_format(now(),’%Y-%m-%d’);
mysql> select time_format(now(),’%H-%i-%S’);

 

日期函数
(增加一个月)

SQL> select to_char(add_months(to_date(’20000101′,’yyyymmdd’),1),’yyyy-mm-dd’) from dual;
结果:2000-02-01
SQL> select to_char(add_months(to_date(’20000101′,’yyyymmdd’),5),’yyyy-mm-dd’) from dual;
结果:2000-06-01

mysql> select date_add(’2000-01-01′,interval 1 month);
结果:2000-02-01
mysql> select date_add(’2000-01-01′,interval 5 month);
结果:2000-06-01

 

别名

SQL> select 1 a from dual;

mysql> select 1 as a;

 

字符串截取函数

SQL> select substr(’abcdefg’,1,5) from dual;
SQL> select substrb(’abcdefg’,1,5) from dual;
结果:abcde

mysql> select substring(’abcdefg’,2,3);
结果:bcd
mysql> select mid(’abcdefg’,2,3);
结果:bcd
mysql> select substring(’abcdefg’,2);
结果:bcdefg
mysql> select substring(’abcdefg’ from 2);
结果:bcdefg
另有SUBSTRING_INDEX(str,delim,count)函数
返回从字符串str的第count个出现的分隔符delim之后的子串。
如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。
如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)

 

执行外部脚本命令

SQL >@a.sql

1mysql> source a.sql
2c:mysqlbin>mysql <a.sql
3c:mysqlbin>mysql 库名 <a.sql

 

导入、导出工具

exp.exe
exp73.exe
imp.exe
imp73.exe

mysqldump.exe
mysqlimport.exe

 

改表名

SQL> rename a to b;

mysql> alter table a rename b;

 

执行命令

;<回车>
/
r
run

;<回车>
go
ego

 

distinct用法

SQL> select distinct 1 from 1;
SQL> select distinct 1,2 from 1;

mysql> select distinct 1 from 1;
mysql> select distinct 1,2 from 1;

 

注释

#

 

当作计算器

SQL> select 1+1 from dual;

mysql> select 1+1;

 

限制返回记录条数

SQL> select * from 表名 where rownum<5;

mysql> select * from 表名 limit 5;

 

新建用户(库)

SQL> create user 用户名 identified by 密码;

mysql> create database 库名;

 

删用户(库)

SQL> drop user 用户名;

mysql> drop database 库名;

 

外连接

使用(+)

使用left join

 

查询索引

SQL> select index_name,table_name from user_indexes;

mysql> show index from 表名 [FROM 库名];

 

通配符

“%”

“%”“_”

 

SQL语法

SELECT selection_list 选择哪些列
FROM table_list 从何处选择行
WHERE primary_constraint 行必须满足什么条件
GROUP BY grouping_columns 怎样对结果分组
HAVING secondary_constraint 行必须满足的第二条件
ORDER BY sorting_columns 怎样对结果排序

SELECT selection_list 选择哪些列
FROM table_list 从何处选择行
WHERE primary_constraint 行必须满足什么条件
GROUP BY grouping_columns 怎样对结果分组
HAVING secondary_constraint 行必须满足的第二条件
ORDER BY sorting_columns 怎样对结果排序
LIMIT count 结果限定

 

 

 

八、单引号的处理

MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

 

九、翻页的SQL语句的处理

MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用 
ROWNUM<100, 不能用ROWNUM>80

 

十、长字符串的处理

ORACLE也有它特殊的地方。INSERTUPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用 
ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。

 

十一、空字符的处理

MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQLNOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符 
进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。

 

最后

以上就是动人月饼为你收集整理的oracle与mysql常用区别整理的全部内容,希望文章能够帮你解决oracle与mysql常用区别整理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部