ORACLE、 SQLSERVER、MYSQL与DB2的区别
--平台性: sqlserver 中小型数据库的首选 mysql 免费,配合php,perl 一般作网站的数据库 db2 对大型分布式应用系统尤为适用。 开放性: SQL Server 只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。 而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据量的关键业务时. Oracle 能在所有主流平台上运行(包括windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。 DB2 能在所有主流平台上运行(包括windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%. 可伸缩性,并行性 SQL server: 并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。 Oracle平行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。如果windowsNT不能满足需要,用户可以把数据库移到UNIX中。 DB:2DB2具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境,数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。数据库分区有时被称为节点或数据库节点 安全性 SQL server:没有获得任何安全证书。 Oracl获得最高认证级别的ISO标准认证。 DB2:获得最高认证级别的ISO标准认证。 性能 SQL Server :多用户时性能不佳 Oracle:性能最高,保持windowsNT下的TPC-D和TPC-C的世界记录。 DB2:适用于数据仓库和在线事物处理性能较高。客户端支持及应用模式 SQL Server :C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB,ODBC连接. Oracle 多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接 DB2 跨平台,多层结构,支持ODBC,JDBC等客户 操作简便 SQL Server 操作简单,但只有图形界面. Oracle 较复杂,同时提供GUI和命令行,在windowsNT和unix下操作相同 DB2 操作简单,同时提供GUI和命令行,在windowsNT和unix下操作相同 使用风险 SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。 Oracle 长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。 DB2 在巨型企业得到广泛的应用,向下兼容性好。风险小。 1. ORACLE oracle能在所有主流平台上运行(包括windows)。完全支持所有的工业标准。采用完全开放策略。 可以使客户选择最适合的解决方案。对开发商全力支持.oracle并行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。 如果windowsNT不能满足需要,用户可以把数据库移到UNIX中。Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。 oracle获得最高认证级别的ISO标准认证.oracle性能最高,保持开放平台下的TPC-D和TPC-C的世界记录oracle多层次网络计算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。 长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。 Oracle在兼容性、可移植性、可联结性、高生产率上、开放性也存在优点。Oracle产品采用标准SQL,并经过美国国家标准技术所(NIST)测试。 与IBMSQL/DS,DB2,INGRES,IDMS/R等兼容。 Oracle的产品可运行于很宽范围的硬件与操作系统平台上。可以安装在70种以上不同的大、中、小型机上;可在VMS、DOS、UNIX、WINDOWS等多种操作系统下工作。能与多种通讯网络相连,支持各种协议(TCP/IP、DECnet、LU6.2等)。提供了多种开发工具,能极大的方便用户进行进一步的开发。Oracle良好的兼容性、可移植性、可连接性和高生产率是OracleRDBMS具有良好的开放性。 2. SQLSERVER SQLServer是Microsoft推出一套产品,它具有使用方便、可伸缩性好、与相关软件集成程度高等优点,逐渐成为Windows平台下进行数据库应用开发较为理想的选择之一。 SQLServer是目前流行的数据库之一,它已广泛应用于金融,保险,电力,行政管理等与数据库有关的行业.而且,由于其易操作性及友好的界面,赢得了广大用户的青睐,尤其是SQLServer与其它数据库,如Access,FoxPro,Excel等有良好的ODBC接口,可以把上述数据库转成SQLServer的数据库,因此目前越来越多的读者正在使用SQLServer. 3. MYSQL MySQL是开源的,支持事务处理,有视图,有存储过程和触发器,有数据库端的用户自定义函数,不能完全使用标准的SQL语法。 MySQL没法处理复杂的关联性数据库功能,例如,子查询(subqueries),虽然大多数的子查询都可以改写成join 另一个MySQL没有提供支持的功能是事务处理(transaction)以及事务的提交(commit)/撤销(rollback)。 一个事务指的是被当作一个单位来共同执行的一群或一套命令。 如果一个事务没法完成,那么整个事务里面没有一个指令是真正执行下去的。 对于必须处理线上订单的商业网站来说,MySQL没有支持这项功能,的确让人觉得很失望。 但是可以用MaxSQL,一个分开的服务器,它能通过外挂的表格来支持事务功能。 外键(foreignkey)以及参考完整性限制(referentialintegrity)可以让你制定表格中资料间的约束,然后将约束(constraint)加到你所规定的资料里面。 这些MYSQL没有的功能表示一个有赖复杂的资料关系的应用程序并不适合使用MySQL。 当我们说MySQL不支持外键时,我们指的就是数据库的参考完整性限制--MySQL并没有支持外键的规则,不过有Innodb 只要在创建表类型时,TYPE=INNODB就可以进行外键的约束。 当然更没有支持连锁删除(cascadingdelete)的功能。 简短的说,如果你的工作需要使用复杂的资料关联,那你还是用原来的Access吧。 SQL Server和oracle的区别
首先一点,这三个数据库不是同一个公司的产品; 二、其所对应的使用对象也不一样,oracle是主流的大型数据库,大多数电信项目都是使用的oracle,而sqlserver与mysql主要是个人以及小型公司使用的的数据库, 但是sqlserver需要收费,mysql不用; 三、如果按功能上来说,oracle最为强大,oracle支持递归查询,二后两者不支持; 四、三个数据库中,只有sqlserver有完整的图形化操作界面,而oracle与mysql都要借助于其他的第三方数据库图形操作界面,比如oracle用的大多都是plsql; 一、开放性 1. SQL Server 只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。 Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。 它不象unix那样久经考验,尤其是在处理大数据库。 2. Oracle 能在所有主流平台上运行(包括 windows)。 完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。 二、可伸缩性,并行性 1. SQL server 并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。 2. Oracle 并行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。 如果windowsNT不能满足需要,用户可以把数据库移到UNIX中。Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。 三、性能 1. SQL Server 多用户时性能不佳 2. Oracle 性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。 四、客户端支持及应用模式 1. SQL Server C/S结构,只支持windows客户,可以用ADO、DAO、OLEDB、ODBC连接。 2. Oracle 多层次网络计算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。 五、操作简便 1. SQL Server 操作简单,但只有图形界面。 2. Oracle 较复杂,同时提供GUI和命令行,在windowsNT和unix下操作相同。 六、使用风险 1. SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容。 2. Oracle 长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。 最后价格上 ORACLE贵过SQLSRVER ORACLE, MYSQL 和 SQL SERVER之区别 MySql数据库 :
MySQL与Oracle的语法区别详细对比Oracle和mysql的一些简单命令对比 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中的写法: DELIMITER $$ DROP PROCEDURE IF EXISTS `SIMS`.`transaction_delSampleInfo`$$ CREATE DEFINER=`root`@`%` PROCEDURE `transaction_delSampleInfo`(in sampleInfoId varchar(50)) BEGIN start 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 ;
DELIMITER $$ DROP PROCEDURE IF EXISTS `test`.`liyukun`$$ CREATE DEFINER=`ids`@`localhost` PROCEDURE `liyukun`(out z int) BEGIN declare 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: LOOP FETCH cur1 INTO v_haoma,v_yingyeting; IF done=1 THEN //如果没有数据了,则离开
LEAVE cur1; ELSE select count(*) into count1 from year2012 where haoma=v_haoma ; if(count1=0) then insert into year2012(haoma,yingyeting) values(v_haoma,v_yingyeting); else
set 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 没有被分组的字段,如 A : SQL> select lpad('test',8,0) from dual; LPAD('TEST',0) ---------------- 0000test B: select lpad('test',8) from dual; LPAD('TEST',8) -------------- test 注:不写最后一个参数,函数会默认在返回值左边加一个空格。 C: SQL> select lpad('test',2,0) ---------------- te D:SQL> select lpad('test',3) from dual; LPAD('TEST',3) -------------- tes
select * from (select id,rownum as row_num from lws_q_bl_result r where r.sample_id = 'B10226072') where row_num=2
while num<10 loop str := to_char(num); num := num+1; end loop;
也可以: for num in 1..10 --这样的缺陷是无法间隔取值 loop str := to_char(num); end loop;
mysql: while num<10
do str := to_char(num); num := num+1; end while;
17)orcale 生成唯一序列是 select sys.guid() from dual ,mysql是 select uuid() from dual public int insertSign(final SpaceSign sign) throws Exception { try{ KeyHolder 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 block
e.printStackTrace(); throw new SQLException("失败",e); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |