欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

mysql与oracle的区别-2

  • 资源ID:104397409       资源大小:58KB        全文页数:12页
  • 资源格式: DOC        下载积分:10积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要10积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

mysql与oracle的区别-2

1.组函数用法规则mysql中组函数在select语句中可以随意使用,但在oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group by子句中的列否则报错eg:select name,count(money) from user;这个放在mysql中没有问题在oracle中就有问题了。2.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。CREATE SEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999INSERT语句插入这个字段值为:序列号的名称.NEXTVAL3.单引号的处理MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。4.翻页的SQL语句的处理MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;PHP里还可以用SEEK定位到结果集的位置。ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。以下是经过分析后较好的两种ORACLE翻页SQL语句(ID是唯一关键字的字段名):语句一:SELECT ID, FIELD_NAME,. FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;语句二:SELECT * FROM ( SELECT ROWNUM AS NUMROW, c.* from (select FIELD_NAME,. FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;5.长字符串的处理长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。6.日期字段的处理MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE,精确到秒,或者用字符串转换成日期型函数TO_DATE(2001-08-01,YYYY-MM-DD)年-月-日24小时:分钟:秒的格式YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种日期格式,可以参看ORACLE DOC.日期型字段转换成字符串函数TO_CHAR(2001-08-01,YYYY-MM-DD HH24:MI:SS)日期字段的数学运算公式有很大的不同。MYSQL找到离当前时间7天用DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到离当前时间7天用 DATE_FIELD_NAME >SYSDATE - 7;MYSQL中插入当前时间的几个函数是:NOW()函数以'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以YYYY-MM-DD的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以HH:MM:SS的格式返回当前的时间,可以直接存到TIME字段中。例:insert into tablename (fieldname) values (now()而oracle中当前时间是sysdate7.空字符的处理MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。8.字符串的模糊比较MYSQL里用字段名like%字符串%,ORACLE里也可以用字段名like%字符串%但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,字符串)>0会得到更精确的查找结果。9. 程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。Oracle和mysql的一些简单命令对比1)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-01SQL> select to_char(add_months(to_date('20000101','yyyymmdd'),5),'yyyy-mm-dd') from dual;结果:2000-06-01mysql> select date_add('2000-01-01',interval 1 month);结果:2000-02-01mysql> select date_add('2000-01-01',interval 5 month);结果:2000-06-01截取字符串:SQL> select substr('abcdefg',1,5) from dual;SQL> select substrb('abcdefg',1,5) from dual;结果:abcdemysql> select substring('abcdefg',2,3);结果:bcdmysql> select mid('abcdefg',2,3);结果:bcdmysql> select substring('abcdefg',2);结果:bcdefgmysql> select substring('abcdefg' from 2);结果:bcdefg2) 在MySQL中from 后的表如果是(select.)这种,那么后面必须有别名3) 连接字符串在Oracle中用| ,SqlServer中用+,MySQL中用concat('a','b','c')4)在SqlServer中的写法:复制代码代码如下:declare id varchar(50);set id='4028e4962c3df257012c3df3b4850001'select * from sims_sample_detect where ID= id;在MySQL中的写法:复制代码代码如下:set a = 189;select * from bc_article where id = a /不用declare在Orcale中的写法:5)MySQL存储过程:复制代码代码如下:DELIMITER $DROP PROCEDURE IF EXISTS SIMS.transaction_delSampleInfo$CREATE DEFINER=root% PROCEDURE transaction_delSampleInfo(in sampleInfoId varchar(50)BEGINstart transaction;update sims_sample_info set del='1' where ID = sampleInfoId;update sims_sample_detect set del='1' where SAMPLE_ID_PARENT = sampleInfoId;update sims_sample_detect_info set del='1' where DETECT_ID in(select ID from sims_sample_detect where SAMPLE_ID_PARENT = sampleInfoId);commit;END$DELIMITER ;变量名不能跟列名相同,否则效果为1=1,且MySQL不区分大小写。6)mysql 游标mysql没有像orcale的动态游标,只有显示游标,例子如下:复制代码代码如下:DELIMITER $DROP PROCEDURE IF EXISTS test.liyukun$CREATE DEFINER=idslocalhost PROCEDURE liyukun(out z int)BEGINdeclare count1 int;DECLARE done INT DEFAULT 0;declare v_haoma varchar(50);declare v_yingyeting varchar(100);DECLARE cur1 CURSOR FOR select haoma,yingyeting from eryue where id<2;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;/这里和oracle有区别,Oracle的PL/SQL的指针有个隐性变量%notfound,Mysql是通过一个Error handler的声明来进行判断的OPEN cur1;cur1: LOOPFETCH cur1 INTO v_haoma,v_yingyeting;IF done=1 THEN /如果没有数据了,则离开LEAVE cur1;ELSEselect count(*) into count1 from year2012 where haoma=v_haoma ;if(count1=0) theninsert into year2012(haoma, yingyeting)values(v_haoma,v_yingyeting);elseset z = z+1;update year2012 set eryue = 100' where haoma=v_haoma;end if;END IF;END LOOP cur1;CLOSE cur1;END$DELIMITER ;执行:复制代码代码如下:call liyukun(a);select a;7) mysql的group by 语句可以select 没有被分组的字段,如select id,name,age from A group by age 这样但是在orcale和sqlserver中是会报错的。这个取出的id,name所在的行是每个分组中的第一行数据。8)orcale用decode()来转换数据,mysql,sqlserver用case when:case t.DETECT_RESULT when '2402' then t.SAMPLEID end (必须有end)9)mysql: 两个select 出的数据相减:(COUNT(distinct(t.SAMPLEID)-CONVERT(COUNT(distinct(case t.DETECT_RESULT when '2402' then t.SAMPLEID end), SIGNED) AS NEGATIVEFROM view_sims_for_report t10)convert,cast用法mysql将varchar转为intconvert(字段名, SIGNED)字符集转换 : CONVERT(xxx USING gb2312)类型转换和SQL Server一样,就是类型参数有点不同 : CAST(xxx AS 类型) , CONVERT(xxx,类型)可用的类型二进制,同带binary前缀的效果 : BINARY字符型,可带参数 : CHAR()日期 : DATE时间: TIME日期时间型 : DATETIME浮点数 : DECIMAL整数 : SIGNED无符号整数 : UNSIGNED11)如果从mysql数据库中取的时候没有乱码,而在Java的List中得到的是乱码的话,那么可能是SQL语句中的有字段不是 varchar的数据类型,这时需要转换convert(字段名, 类型)转换一下,Orcale则用ToChar函数12)Orcale的大字段用clob,图像用blob,clob字段在Hibernate的映射文件中用String就可以13) mysql,orcale,sqlserver 语句执行顺序开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最终结果每个子句执行后都会产生一个中间结果 ,供接下来的子句使用,如果不存在某个子句,就跳过。14) LPAD函数1在oracle的数据库里有个函数 LPAD(String a,int length,String addString).2作用:把addString添加到a的左边,length 是返回值的长度。3例子复制代码代码如下:A : SQL> select lpad('test',8,0) from dual;LPAD('TEST',8,0)-0000testB: select lpad('test',8) from dual;LPAD('TEST',8)-test 注:不写最后一个参数,函数会默认在返回值左边加一个空格。C: SQL> select lpad('test',2,0) from dual;LPAD('TEST',2,0)-teD:SQL> select lpad('test',3) from dual;LPAD('TEST',3)-tes15)Orcale中没有TOP,是通过select * from (select * from A order by id desc) where rownum=1注:不能直接写 select * from A where rownum=1 order by id desc 因为语句执行的顺序是先where再order by ,如果这样写就无法按id的排序来取第一个了。不能写rownum=2或rownum>1这样,因为Orcale 默认必须包含第一条。如果非要取第二条的话,可以写成:复制代码代码如下:select * from (select id,rownum as row_num from lws_q_bl_result r where r.sample_id = 'B10226072') where row_num=216)Orcale,MySql while循环比较Orcale:复制代码代码如下:while num<10loopstr := to_char(num);num := num+1;end loop;也可以:复制代码代码如下:for num in 1.10 -这样的缺陷是无法间隔取值loopstr := to_char(num);end loop;mysql:复制代码代码如下:while num<10dostr := to_char(num);num := num+1;end while;17)orcale 生成唯一序列是 select sys.guid() from dual ,mysql是 select uuid() from dual18)MySql和Orcale的ID自增MySql由于是在数据库中实现ID自增,所以如果想返回插入一条序列的该条ID,只能用如下方法:复制代码代码如下:public int insertSign(final SpaceSign sign) throws Exception tryKeyHolder keyHolder = new GeneratedKeyHolder();final String sql = "insert into space_sign(userId,userName,nickName,contentText,contentHtml,isPublic,commentCount,userIp,status,insertTime)" +" values(?,?,?,?,?,?,?,?,?,?)"template.update(new PreparedStatementCreator() public PreparedStatement createPreparedStatement(Connection connection) throws SQLException PreparedStatement ps = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);ps.setInt(1, sign.getUserId();ps.setString(2, sign.getUserName();ps.setString(3, sign.getNickName();ps.setString(4, sign.getContentText();ps.setString(5, sign.getContentHtml();ps.setInt(6, sign.getIsPublic();ps.setInt(7,sign.getCommnetCount();ps.setString(8, sign.getUserIp();ps.setInt(9, sign.getStatus();ps.setTimestamp(10, new java.sql.Timestamp(sign.getInsertTime().getTime();return ps;, keyHolder);Long generatedId = keyHolder.getKey().longValue();return generatedId.intValue(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();throw new SQLException("发表签名失败", e);由于Orcale的ID是在插入该条数据之前就通过select SEQ_BLOG_ID.nextval from dual 获得的,所以直接返回既可。ps:SEQ_BLOG_ID为在数据库中设置的sequence。

注意事项

本文(mysql与oracle的区别-2)为本站会员(沈***)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!