教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

Oracle和SQLServer的语法区别(9)

来源:网络收集 时间:2026-07-29
导读: DENY 语句在安全系统中创建一个条目,拒绝当前数据库中安全帐户的权限,并禁止安全帐户以组或角色成员身份继承权限。Oracle 没有 DENY 语句。REVOKE 语句撤销以前授予当前数据库中一个用户的权限或被其拒绝的权限。

DENY 语句在安全系统中创建一个条目,拒绝当前数据库中安全帐户的权限,并禁止安全帐户以组或角色成员身份继承权限。Oracle 没有 DENY 语句。REVOKE 语句撤销以前授予当前数据库中一个用户的权限或被其拒绝的权限。

Oracle Microsoft SQL Server GRANT {ALL [PRIVILEGES] | permission[,Un]} { [(column[,Un])] ON {table | view} | ON {table | view}[(column[,Un])] | ON {stored_procedure | extended_procedure} } TO security_account[,Un] [WITH GRANT OPTION] [AS {group | role}] REVOKE [GRANT OPTION FOR] {ALL [PRIVILEGES] | GRANT {ALL permission[,Un]} [PRIVILEGES][column_list] | { permission_list [column_list]} [(column[,Un])] ON {table | view} ON {table_name [(column_list)] | ON {table | view}[(column[,Un])] | view_name [(column_list)] | {stored_procedure | | stored_procedure_name} extended_procedure} TO {PUBLIC | name_list } } [WITH GRANT OPTION] {TO | FROM} security_account[,Un] [CASCADE] [AS {group | role}] DENY {ALL [PRIVILEGES] | permission[,Un]} { [(column[,Un])] ON {table | view} | ON {table | view}[(column[,Un])] | ON {stored_procedure | extended_procedure} } TO security_account[,Un] [CASCADE] 有关对象级权限的详细信息,请参见 SQL Server Books Online。

在 Oracle 中,REFERENCES 权限只能授予一个用户。SQL Server 则允许将 REFERENCES 权限授予数据库用户和数据库组。在 Oracle 和 SQL Server 中,INSERT、UPDATE、DELETE 和 SELECT 权限授予的方式相同。

实施数据完整性和业务规则

实施数据完整性确保了数据库中数据的质量。在表的规划中,有两个重要的步骤,即识别列的有效值,以及确定如何在列中实施数据完整性。数据完整性可以分为四个类别,并用不同的方法来实施。

完整性类型 实体完整性 范围完整性 引用完整性 用户定义的完整性 实施方式 PRIMARY KEY 约束 UNIQUE 约束 IDENTITY 属性 DEFAULT 定义 FOREIGN KEY 约束 CHECK 约束 为空性 范围 DEFAULT 定义 FOREIGN KEY 约束 CHECK 约束 为空性 在 CREATE TABLE 中的列级和表级约束 存储过程 触发器。 实体完整性把一行定义为特定表的一个单独实体。实体完整性通过索引、UNIQUE 约束、PRIMARY KEY 约束或 IDENTITY 属性,来实施表的标识符列或主键的完整性。

约束的命名

应该始终显式命名约束。如果没有,则 Oracle 和 Microsoft SQL Server 使用不同的命名规则隐式命名约束。这些命名上的差别会给迁移过程带来不必要的麻烦。在删除或禁用约束时,就会造成不一致,因为必须使用名称,约束才能被删除。对于 Oracle 和 SQL Server 来说,显式命名约束的语法是相同的。 CONSTRAINT constraint_name

主键和唯一列

SQL-92 标准要求,主键中的所有值应该唯一,并且该列不允许有空值。一旦定义了 PRIMARY KEY 或 UNIQUE 约束,Oracle 和 Microsoft SQL Server 通过自动创建唯一索引,来实施唯一性。此外,主键列自动定义为 NOT NULL。每个表只允许一个主键。

对主键来说,默认地创建一个 SQL Server 聚集索引,尽管也可以请求非聚集索引。主键上的 Oracle 索引可以通过删除或禁用该约束来删除,而 SQL Server 索引只能通过删除该约束来删除。

在两种 RDBMS 中,均可使用 UNIQUE 约束来定义备用键。在任一表上,均可定义多个 UNIQUE 约束。UNIQUE 约束列可为空。在 SQL Server 中,除非另外指定,默认创建非聚集索引。 在迁移应用程序时,要注意,对于完全唯一键(单个或多个列索引),SQL Server 只允许一行包含 NULL 值,而 Oracle 允许任意数量的行包含 NULL 值。

Oracle CREATE TABLE DEPT_ADMIN.DEPT (DEPT VARCHAR2(4) NOT NULL, DNAME VARCHAR2(30) NOT NULL, CONSTRAINT DEPT_DEPT_PK PRIMARY KEY (DEPT) USING INDEX TABLESPACE USER_DATA PCTFREE 0 STORAGE ( INITIAL 10K NEXT 10K MINEXTENTS 1 MAXEXTENTS UNLIMITED), CONSTRAINT DEPT_DNAME_UNIQUE UNIQUE (DNAME) USING INDEX TABLESPACE USER_DATA PCTFREE 0 STORAGE ( INITIAL 10K NEXT 10K MINEXTENTS 1 MAXEXTENTS UNLIMITED) ) Microsoft SQL Server CREATE TABLE USER_DB.DEPT_ADMIN.DEPT (DEPT VARCHAR(4) NOT NULL, DNAME VARCHAR(30) NOT NULL, CONSTRAINT DEPT_DEPT_PK PRIMARY KEY CLUSTERED (DEPT), CONSTRAINT DEPT_DNAME_UNIQUE UNIQUE NONCLUSTERED (DNAME) ) 增加和删除约束

禁用约束可以提高数据库性能和简化数据复制过程。例如,在远程站点重建或复制表数据时,不需要再重复约束检查,因为数据最初插到表中时,数据完整性已经检查过了。可以编写一个 Oracle 应用程序,禁用或启用约束(除 PRIMARY KEY 和 UNIQUE 外)。在 Microsoft SQL Server 中,将 ALTER TABLE 语句与 CHECK 和 WITH ONCHECK 选项一起使用,也可实现上述过程。 此插图给出了,这一过程的对比。

在 SQL Server 中,可以使用 NOCHECK 子句和 ALL 关键字延迟所有的表约束。

如果 Oracle 应用程序要使用 CASCADE 选项禁用或删除 PRIMARY KEY 或 UNIQUE 约束,则可能需要重写一些代码,因为 CASCADE 选项禁用或删除父约束及其相关的任何子完整性约束。 下面是该语法的一个示例:

DROP CONSTRAINT DEPT_DEPT_PK CASCADE

必须修改 SQL Server 应用程序,使其先删除子约束,然后再删除父约束。例如,要删除 DEPT 表上的 PRIMARY KEY 约束,必须删除列 STUDENT.MAJOR 和 CLASS.DEPT 上的外键。下面是该语法的一个示例: ALTER TABLE STUDENT

DROP CONSTRAINT STUDENT_MAJOR_FK ALTER TABLE CLASS

DROP CONSTRAINT CLASS_DEPT_FK ALTER TABLE DEPT

DROP CONSTRAINT DEPT_DEPT_PK

ALTER TABLE 语法(用于增添和删除约束)对 Oracle 和 SQL Server 几乎是相同的。

产生连续的数值

如果 Oracle 应用程序使用 SEQUENCE,则可以方便地对它进行修改,来使用 Microsoft SQL Server IDENTITY 属性。

类别 语法 Microsoft SQL Server IDENTITY CREATE TABLE new_employees ( Empid int IDENTITY (1,1), Employee_Name varchar(60), CONSTRAINT Emp_PK PRIMARY KEY (Empid) ) 如果增加间隔为 5: CREATE TABLE new_employees ( Empid int IDENTITY (1,5), Employee_Name varchar(60), CONSTRAINT Emp_PK PRIMARY KEY (Empid) ) 每个表中的标识符一个 列 允许空值 否 可否使用默认约束、不能使用 值 实施唯一性 是 在 INSERT、SELECT INTO 或大容量复制语句完成之后,查询@@IDENTITY (function) 当前最大的标识编号 返回在标识符列创建过程中指定的种IDENT_SEED('table_name') 子值 返回在标识符列创建过程中指定的增IDENT_INCR('table_name') 量值 当引用具有 IDENTITY 属性的列时,在 SELECT、SELECT 语法 INSERT、UPDATE 和 DELETE 语句中,可以使用关键字 IDENTITYCOL 代替列的名称。 尽管 IDENTITY 属性在一个表中自动完成行编号,但不同的表(每个表均有其自己的标识符列)的属性值可能会相同。这是因为,IDENTITY 属性只保证在使用它的表中唯一。如果应用程序必须生成一个标识符列,其在整个数据库中、或者甚至每个联网计算机上的每个数 …… 此处隐藏:3601字,全部文档内容请下载后查看。喜欢就下载吧 ……

Oracle和SQLServer的语法区别(9).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/443128.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)