Oracle与Sql server的区别

干货:
–sql server 与 oracle的区别:
–DBMS 数据库管理系统
–1.数据类型不同。
–sql server 的数据类型:int ,smallint ,char,varchar,nchar,nvarchar,ntext,datetime,smalldatetime,money,decima,
–float,bit……

  --oracle 的数据类型:number(p,s),char,varchar2,Date,LOB
           --注意:insert into table_name values('1','张三','男',date'2012-3-5');---插入字符串日期前加date转换类型

–2.获得当前系统时间的函数不同。
–sql server :getdate()

  --oracle:sysdate
        --例如:设定日期格式的函数:to_char(sysdate,'yyy-mm-dd');

–3.在oracle中没有默认约束的说法
–sql server 中添加默认约束:alter table talbe_name add DF_table_name default(‘男’) for sex;

  --oracle 中添加默认值:alter table table_name modify(sex default('男'));

–4.连接变量和字符串的方式不一样
–sql server 中连接:使用“+”连接,例如:print ‘aaaa’+@name;

  --oracle  中连接:使用“||”连接,例如:dbms_output.put_line('aaa'||name);---name为变量

–5.oracle没有identity自动增长列,而是使用序列实现增长
–sql server 自动增长:在表的主键列中可直接使用identity(1,1)实现增长

  --oracle 使用序列自动增长:
                             create sequence se_id 
                             start with 1
                             increment by 1
  --使用序列实现自动增长:se_id.nextval

–6.条件语句if……else……的语法不同
–sql server中:
if 条件
begin
…………
end
else
begin
…………
end
–oracle中:
if 条件1 then
…………;
elsif 条件2 then
…………;
else
…………;
end if;

–7.case语句的语法不同
–sql server中:
–select …case…(else)…end…语句
select stuno ‘学号’,case
when grade>=90 and grade<=100 then ‘★★★★’
when grade>=80 and grade<90 then ‘★★★’
when grade>=70 and grade<80 then ‘★★’
when grade>=60 and grade<70 then ‘★’
else ‘差’
end as ‘等级’ from score
go
–oracle中:
declare
nums number:=&nos;–&nos表示提示传入值
begin
case nums
when 100 then
dbms_output.put_line(‘满分也,不错’);
when 90 then
dbms_output.put_line(‘90分页很不错了’);
end case;
end;
–8.触发器创建语法不同
–sql server中:

     --首先判断触发器是否已经存在
     if exists (select * from sys.sysobjects where name='tr_delete')
--如果存在先删除
drop trigger tr_delete
     go
     
    --创建触发器
    create trigger tr_delete
    on bookInfo
    instead of delete
    as
        --定义变量
        declare @bookid int 
        select @bookid=Bookid from deleted---deleted执行删除语句( delete from BookInfo where BookId=1),自动生成的deleted表
        --删除与该图书的相关记录(先删除从表再删除主表)
        delete from borrowinfo where  bookid=@bookid
        delete from backinfo where  bookid=@bookid
        delete from BookInfo where BookId=@bookid
        --判断
        if @@error<>0
        begin
            print '删除失败'
            rollback transaction
        end
        else
        begin
            print '删除成功'
        end
    go
    delete from BookInfo where BookId=1        
     
 --oracle中:
    --创建触发器
    create or replace trigger tri_test
    before insert or update or delete 
    on table_name
    [for each row]---如果要使用 :new /:old 就必须使用行触发器
    declare
         nums varchar2(20);
    begin
      select 'F'||lpad('aa',5,0) into nums from dual;
    end;

–9.oracle中的存储过程
–sql server中存储过程:

        --判断存储过程是否已经存在
        if exists(select * from sys.sysobjects where name='proc_name')
 --如果存在先删除
 drop proc proc_name
        go
        
        --创建存储过程语句
        create proc/procedure proc_name
        @参数名1 数据类型 [out/output],
        @参数名2 数据类型 [out/output]
        as
              …………
        go
        
        --调用存储过程
        --如果有输出参数,则需定义变量(假设@参数2为输出参数)
        declare @变量名 数据类型
        exec proc_name @参数名1='aaa',@参数名2=@变量名 out
        
        
        ---oracle中带游标及循环的存储过程
        
         create or replace procedure proc_selCurrent
         (
                names varchar2
         )
         as
                cursor cursor_sel
                is
                select DepositSum,cardType,name,state from CurrentAccount where name like '%'||names||'%';
                dd number;
                cc number;
                nn varchar2(20);
                sta number;
                begin
                  open cursor_sel;
                       loop
                         fetch cursor_sel into dd,cc,nn,sta;
                         dbms_output.put_line('存款金额:'||dd||'姓名:'||nn);
                       exit when cursor_sel%notfound;
                       end loop;
                  close cursor_sel;
                end;
                
          --调用存储过程
          begin
            proc_selCurrent('a');
          end;

–10.创建用户的方式不同
–sql server中
–1、创建登陆账号:sa-----123456
create Login 登陆名称 with password=‘登陆密码’

       --修改登陆账户:
             alter Login 登陆名称 with name='新登录名称' and password='新登录密码'
       --禁用/启用登陆账号
             alter Login 登录名称 disable(禁用)/enable(启用)
       --删除登陆账号
             drop Login 登录名称
             
       --2、创建用户:
        create user 用户名 for/from Login 登陆名称
        
        --修改用户名
        alter user 用户名 with name='新用户名'
        
        --删除用户名
        drop user 用户名
        
        ---授权限
        grant select/update/delete/insert on 表名 to 用户名
          
        
    ---oracle中:
    
        ---创建用户语法:
              create user 用户名
              identified by 密码
              default tablespace users
              temporary tablespace temp
              quota 10M on users
              
              --修改密码:
              alter user 用户名 identified by 新密码
              
              --授予权限:
              grant create session to 用户名
              
              --删除用户
              drop user 用户名 cascade;

##湿货
Oracle数据库:Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。

它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。

sql server数据库:美国Microsoft公司推出的一种关系型数据库系统。SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案

两者的区别:

(1)操作的平台不同

   Oracle可在所有主流平台上运行,Oracle数据库采用开放的策略目标,它使得客户可以选择一种最适合他们特定需要的解决方案。客户可以利用很多种第三方应用程序、工具。而SQL Server却只能在Windows上运行了。

但SQL Sever在Window平台上的表现,和Windows操作系统的整体结合程度,使用方便性,和Microsoft开发平台的整合性都比Oracle强的很多。但Windows操作系统的稳定性及可靠性大家是有目共睹的,再说Microsoft公司的策略目标是将客户都锁定到Windows平台的环境当中,只有随着Windows性能的改善,SQL Server才能进一步提高。从操作平台这点上Oracle是完全优胜于SQL Server的了。
也就是说Oracle支持多种操作系统,sql server支持window系统
(2)文体结构不同

oracle的文件体系结构为:
数据文件 .dbf(真实数据)

日志文件 .rdo

控制文件 .ctl

参数文件 .ora

sql server的文件体系结构为:

.mdf (数据字典)

.ndf (数据文件)

.ldf (日志文件)

(3)存储结构不同

oracle存储结构:

在oracle里有两个块参数pctfree(填充因子)和pctused(复用因子),可控制块确定块本身何时有,何时没有足够的空间接受新信息(对块的存储情况的分析机制)

这样可降低数据行连接与行迁移的可能性。块的大小可设置(oltp块和dss块)

在oracle中,将连续的块组成区,可动态分配区(区的分配可以是等额的也可以是自增长的)可减少空间分配次数

在oraclel里表可以分为多个段,段由多个区组成,每个段可指定分配在哪个表空间里(段的类型分为:数据段、索引段、回滚段、临时段、cash段。oracle里还可对表进行分区,可按照用户定义的业务规则、条件或规范,物理的分开磁盘上的数据。

这样大大降低了磁盘争用的可能性。

oracle有七个基本表空间:

·system表空间(存放数据字典和数据管理自身所需的信息)

·rbs回滚表空间

·temp临时表空间

·tools交互式表空间

·users用户默认表空间

·indx索引表空间

·dbsys福数据表空间

不同的数据分别放在不同的表空间(数据字典与真实数据分开存放),在oracle里基表(存储系统参数信息)是加密存储,任何人都无法访问。只能通过用户可视视图查看。

sql server 存储结构

以页为最小分配单位,每个页为8k(不可控制,缺乏对页的存储情况的分析机制),可将8个连续的页的组成一个‘扩展’,以进一步减少分配时所耗用的资源。(分配缺乏灵活性),在sql server里数据以表的方式存放,而表是存放在数据库里。

sql server有五个基本数据库: www.2cto.com

·master(数据字典)

·mode(存放样版)

·tempdb(临时数据库)

·msdb(存放调度信息和日志信息)

·pubs(示例数据库)

真实数据与数据字典存放在一起。对系统参数信息无安全机制。

(4)安全性

      Oracle的安全认证获得最高认证级别的ISO标准认证,而SQL Server并没有获得什么安全认证。这方面证明了Oracle的安全性是高于SQL Server的。

(5)性能不同

SQL Server 多用户时性能不佳

Oracle 性能最高, 保持windowsNT下的TPC-D和TPC-C的世界记录。

(6)开放性

SQL Server 只能在windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据量的关键业务时。

Oracle 能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持

(7)客户端支持及应用模式

SQL Server C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB ,ODBC连接.

Oracle 多层次网络计算,支持多种工业标准,可以用ODBC, JDBC,OCI等网络客户连接

意见:

SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。

Oracle 长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值