Oracle和SQLServer的语法区别(9)
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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




