mysql与oracle的区别-2

上传人:沈*** 文档编号:104397409 上传时间:2022-06-10 格式:DOC 页数:12 大小:58KB
收藏 版权申诉 举报 下载
mysql与oracle的区别-2_第1页
第1页 / 共12页
mysql与oracle的区别-2_第2页
第2页 / 共12页
mysql与oracle的区别-2_第3页
第3页 / 共12页
资源描述:

《mysql与oracle的区别-2》由会员分享,可在线阅读,更多相关《mysql与oracle的区别-2(12页珍藏版)》请在装配图网上搜索。

1、1.组函数用法规则mysql中组函数在select语句中可以随意使用,但在oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group by子句中的列否则报错eg:select name,count(money) from user;这个放在mysql中没有问题在oracle中就有问题了。2.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。CREATE SEQUENCE序列号的名称(最好是表名+序列号标记)INC

2、REMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999INSERT语句插入这个字段值为:序列号的名称.NEXTVAL3.单引号的处理MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。4.翻页的SQL语句的处理MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;PHP里还可以用SEEK定位到结果集的位置。ORACLE处理翻页

3、的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM80。以下是经过分析后较好的两种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 80 AND NUMROW SUBDATE(NOW(),INTERVAL 7

4、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的非空字段也有

5、空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。8.字符串的模糊比较MYSQL里用字段名like%字符串%,ORACLE里也可以用字段名like%字符串%但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,字符串)0会得到更精确的查找结果。9. 程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。Oracle和mysql的一些简单命令对比1)SQL select to_char(sysdate

6、,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(20

7、000101,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 substri

8、ng(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=

9、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 transactio

10、n_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 SA

11、MPLE_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

12、 v_haoma varchar(50);declare v_yingyeting varchar(100);DECLARE cur1 CURSOR FOR select haoma,yingyeting from eryue where idFROM子句-WHERE子句-GROUP BY子句-HAVING子句-ORDER BY子句-SELECT子句-LIMIT子句-最终结果每个子句执行后都会产生一个中间结果 ,供接下来的子句使用,如果不存在某个子句,就跳过。14) LPAD函数1在oracle的数据库里有个函数 LPAD(String a,int length,String addStrin

13、g).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)-t

14、es15)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或rownum1这样,因为Orcale 默认必须包含第一条。如果非要取第二条的话,可以写成:复制代码代码如下:select * from (select id,rownum as row_num fro

15、m lws_q_bl_result r where r.sample_id = B10226072) where row_num=216)Orcale,MySql while循环比较Orcale:复制代码代码如下:while num10loopstr := to_char(num);num := num+1;end loop;也可以:复制代码代码如下:for num in 1.10 -这样的缺陷是无法间隔取值loopstr := to_char(num);end loop;mysql:复制代码代码如下:while num10dostr := to_char(num);num := num+1;

16、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

17、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

18、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.getCo

19、mmnetCount();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。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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