数据库差别小记mysql
1、 数据类型区别sql
1.整型
Mysql:使用int、decimal、float、double等
Oracle:经常使用的只有number,没有int、decimal、float、double等类型
2.字符串型
Mysql:只有varchar型,没有varchar2型
Oracle:只有varchar2型,没有varchar型(varchar2把空串等同于null处理,而varchar仍按照空串处理)
3.时间类型
Mysql:date和time都有,都占3个字节
Oracle:只有date,且占7个字节
4.自动增加列
Mysql:有自动增加列字段,能够直接添加
Oracle:没有自动增加列字段,使用Sequence或者触发器完成
5.非空字段
Mysql:非空字段也能存空字符串
Oracle:非空字段不能存空字符串数据库
2、 函数区别服务器
1.获取字符串位置函数
Mysql:instr(字段名,字符串)返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,不然返回位置(从1开始),或者使用locate()函数
Oracle:instr('源字符串','目标字符串','开始位置','第几回出现')返回内容一致,后两个参数可省略
2.截取字符串函数
Mysql:substring('abcd',2,2)
Oracle:substr('abcd',2,2)
3.字符串长度函数
Mysql:char_length('AAAASDF')
Oracle:length('AAAASDF')
4.字符串转换成时间函数
Mysql:STR_TO_DATE(str,format)
Oracle:to_date(str,format)
5.时间加减函数
Mysql:
一、 date_sub(date,interval date);
date_sub(curdate(),interval 1 day) 加一天
date_sub(curdate(),interval 1 mouth) 加一个月
date_sub(curdate(),interval -1 year)减一年
二、 DATEDIFF(date1,date2)、TIMEDIFF(date1,date2),date1减date2;
Oracle:可直接加减时间或日期;ADD_MONTHS(sysdate,1)获取下个月,没有add_days和add_years函数,获取时间差可直接date1-date2;
6.返回不小于X的最小整数函数
Mysql:ceiling(x)
Oracle:ceil(x)oracle
3、循环结构区别函数
1.If循环
Mysql :if……elseif
Oracle:if……elsif
2.While循环
Mysql:WHILE……DO……END WHILE
Oracle:WHILE......LOOP......END LOOP
3.For/loop循环
Mysql: LOOP // lp1 为循环体名称 LOOP 为关键字
insert into user_profile (uid) values (i);
set i = i+1;
if i > 30 then
leave lp1; // 离开循环体
end if;
end LOOP; // 结束循环
Oracle: FOR X IN REVERSE 1..10 LOOP --reverse由大到小
DBMS_OUTPUT.PUT_LINE('内:x='||x);
END LOOP;
DBMS_OUTPUT.PUT_LINE('end loop:x='||X); x=1;
END;oop
4、存储结构区别ui
1.建立存储过程
Mysql:mysql使用create建立存储过程,且在存储过程当中不能建立别的存储过程
Oracle:使用create or replace的方法建立存储过程,且存储过程若是定义在包中,一个包中能够包含多个存储过程和方法.若是定义在Procedures中,存储过程当中不能够定义多个存储过程
2.建立函数
Mysql:使用create建立,且Functions不能够定义多个函数,返回值用returns
Oracle:使用create or replace的方法建立,且oracle 函数能够定义在package中,也能够定义在Functions中. 若是定义在包中,一个包中能够包含多个存储过程和函数.若是定义在Functions中,每一个函数只能定义一个函数,返回值用return
3.传入参数
Mysql:函数中参数类型in/out/inout写在参数名前面,且in能够省略,out和inout不可省略
Oracle:函数中参数类型in/out/inout写在参数名后面,且都必须写,不可省略
4.在存储过程当中调用存储过程
Mysql:存储过程调用存储过程,须要使用Call pro_name(参数)
Oracle:调用存储过程直接写存储过程名就能够了
5.过程和函数的声明变量的位置不一样
Mysql:声明变量在begin...end体内,begin以后其余任何内容以前
Oracle:声明变量在begin…end体以前spa
5、触发器区别orm
1.建立语句
Mysql:Mysql使用 create trigger建立触发器,每一个触发器只支持一个事件
Oracle:Oracle使用create or replace trigger语法建立触发器,能够在一个触发器触发insert,delete,update事件
2.显示编辑
Mysql:mysql trigger 不能在客户端显示或编辑.须要在服务器所在的机器上操做
Oracle:Oracle trigger 能在客户端显示或编辑.须要在服务器所在的机器上操做
6、基本语法区别
1.退出语句
Mysql:使用leave语句,若是leave语句后面跟的是存储过程名,则退出当前存储过程. 若是leave语句后面跟的是lable名. 则退出当前lable
Oracle:使用exit语句,若是exit语句在循环中就退出当前循环.若是exit语句再也不循环中,就退出当前过程或方法
2.注释方式
Mysql:使用"-- message" 或 "/** …. /" 或 "/ …. /"来注释
Oracle:Oracle使用"-- message" 或 "/ …. */" 或 "#"来注释
3.时间格式及获取当前时间
Mysql:Mysql时间格式:%Y-%m-%d %H:%i:%s ,获取当前时间为now()
Oracle:Oracle时间格式:yyyy-MM-dd hh:mi:ss ,获取当前时间为SYSDATE
4.链接字符串
Mysql:Mysql使用concat方法链接字符串. MySQL的concat函数能够链接一个或者多个字符串
Oracle:oracle使用||链接字符串,也可使用concat函数. 但Oracle的concat函数只能链接两个字符串
7、其余区别
1.分页查询
Mysql:查询分页时使用limit辅助查询
Oracle:使用rownum辅助分页查询
2.链接查询
Mysql:只能使用left join ,right join等关键字
Oracle:Oracle左链接,右链接可使用(+)来实现,"(+)"所在位置的另外一侧为链接的方向
3.模糊查询速度
Mysql:使用 字段名 like '%字符串%'进行模糊查询
Oracle:Oracle里也能够用字段名 like '%字符串%'进行模糊查询 但这种方法不能使用索引, 速度不快,用字符串比较函数 instr(字段名,'字符串')>0 会获得更精确的查找结果
使用建议:
a.尽可能避免使用空字符串b.在Oracle数据库使用instr()函数时只使用前两个参数c.在Mysql数据库中使用cancat()函数时,一次只链接两个字符串,须要链接多个的时候嵌套使用函数