oracle约束键解析8624.docx

上传人:zhang****gqing 文档编号:69315831 上传时间:2023-01-01 格式:DOCX 页数:40 大小:373.54KB
返回 下载 相关 举报
oracle约束键解析8624.docx_第1页
第1页 / 共40页
oracle约束键解析8624.docx_第2页
第2页 / 共40页
点击查看更多>>
资源描述

《oracle约束键解析8624.docx》由会员分享,可在线阅读,更多相关《oracle约束键解析8624.docx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 一、 数据库约束的作用和分类 primarykey 和unique他们的作用是为了不让表中有重复的数据(一个表) check表示表中列的数据的范围性的定义(一个表) defult表示表中的默认值 foreignkey 表与表之间的联系(两个或两个以上的表)【unique是可以包含null值的,并且一个表中可以有多个unique constraint而primarykey在一个表中只能有一个.并且不能有null值】二、针对约束创建有两种不同的思想 第一、创建标的时候一同将约束创建了 第二、你的表已经创建好了,向表中添加约束 三、下面我就一一的介绍他们 一、 primary key 主键约束 两

2、种写法 在已经创建的表中添加约束 解释:添加约束的时候一定要修改表故用(alter修改) Alter table table1 Add primary key (列名1,列名2) 同表一起创建 Create table table1 (列名1 数据类型 是否为空 primary key , 列名1 数据类型 是否为空 ) 上面的是两种情景为一个字段设置主键,接下来是以多个列作为主键。 Create table table1 ( 列名1 数据类型 是否为空, 列名2 数据类型 是否为空, 列名3 数据类型 是否为空, Primary key (列名1 ,列名2) ) 二、Check约束 这个和主

3、键约束差不多 Alter table table1 Add unique(列名) 三、外键约束 好多的同学一直也都不理解外键约束,到底什么才是外键?主键在那个表上?外键在那个表上?用T-SQL语句写的时候是主表在前,还是外间表在前?等等一系列的问题! 接下来我讲给大家说说这个主外键到底怎么弄的。 其实,主外键之间正如它的名字一样,他们之间有一个主从关系,一个主表,一个从表,主表上面设置的是主键,从表上面设置的是外键(foreign key),主键表中的数据发生变化的时,外键(foreign key)表的数据立刻就发生改变。 向已有的表中添加一个主键(没有就是添加,添加就是修改表) Alter

4、table table1 Add foreign key (列名1)references table2(列名2) 创建表的时候一同创建外键 Create table table1 (列名4 数据类型 是否为空 primary key, 列名3 数据类型 是否为空, 列名1 数据类型 references table2 (列名2) ) 注: Table1外键表 Table2主键表 列名1是主表列 列名2是外键表列 最一般常用的是主表的列和外键表的列的字段是一样的 一般多为ID 可以作为主键的。这是两个之间的交互。 四、Check约束 他也是基于一个表中的约束,限定表中列直接爱你数据的参照关系。

5、向一个以创建的表中添加约束 Alter tabel table1 Add constraint 约束名 check(列名对于列的限制条件) 多是一些可以找到范围的数据,例如年龄,身高,体重。 五、default 默认约束 他是一个对于某一个值的约束,他是唯一的一个用for关联词的句子 向表中添加一个默认约束 Alter tabletable1 Add default 默认值for 列名 六、删除约束 删除约束也是对于表的修改故: Alter table table1 Drop constraint 约束名 注:上面就是我所理解的一些约束。想要记住他们并不难 1 开头的一般都是 alter ta

6、ble 表名 或是create table 表名 2 在已有的表中添加约束用 alter 3 与表同时创建用 create 4 他们所有的关键字: 主键 约束:primary key 唯一性约束:unique 外键 约束:froeign key.references(参照).两个表之间的关系,该是互相参照 查询 约束:. constraint(约束).check对字段查询,对字段约束 默认 约束:.default.for(给). 将前面默认的值 给 后边的字段ORACLE约束总结2012-05-13 08:36 by 潇湘隐者, 682 visits,收藏,编辑你对ORACLE约束的了解如何?

7、比较模糊还是相当透彻?如果你对下面几个问题了如指掌的话,恭喜你,你已经对约束掌握得比较好了,不用看这篇文章了。ORACLE的约束有啥功能作用? 有哪些类型约束(不同版本ORACLE是否不同)?视图有约束吗?约束是否会影响SQL性能? 约束信息存储在哪些系统视图、数据字典中?约束能否修改名称?能否禁用约束?延迟约束有啥好处.约束定义约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作。约束可以是列一级别的 也可以是表级别的。定义约束时没有给出约束的名字,ORACE系统将为

8、该约束自动生成一个名字,其格式为SYS_Cn,其中n为自然数(强烈建议各位在创建表或增加约束时,给约束定义名称。).约束功能约束的功能:实现一些业务规则,防止无效的垃圾数据进入数据库,维护数据库的完整性(完整性指正确性与一致性)。从而使数据库的开发和维护都更加容易。约束分类约束分为6类: 非空(NOT NULL)约束、 唯一(UNIQUE)约束、主键(PRIMARY KEY)约束、外键(FOREIGN KEY)约束、条件(CHECK)约束、REF约束。非空(NOT NULL)约束:顾名思义,所约束的列不能为NULL值。否则就会报错唯一(UNIQUE)约束:在表中每一行中所定义的这列或这些列的值

9、都不能相同。必须保证唯一性。否则就会违法约束条件。主键(PRIMARY KEY)约束:唯一的标识表中的每一行,不能重复,不能为空。 创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)。需要注意的是:每个表只能有且有一个主键约束。外键(FOREIGN KEY)约束:用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等SQL性能的额外开销,不少系统里面通过业务逻辑控制

10、来取消外键约束。例如在数据仓库中,就推荐禁用外键约束。条件(CHECK)约束:表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。REF约束的定义:REF column by definition references an object in another object type or in a relational table. A REF constraint lets you further describe the relationship between the REF column and the object it re

11、ferences.ORACLE 11 数据库的约束类型如下: ORACLE 10 数据库的约束类型如下:在oracle 官方文档C(check constraint on a table)P(primary key)U(unique key)R(referential integrity)V(with check option, on a view)O(with read only, on a view)CCheck constraint on a tablePPrimary keyUUnique keyRReferential integrityVWith check option, on

12、a viewOWith read only, on a viewHHash expressionFConstraint that involves a REF columnSSupplemental logging对于H、S类型,尚不清楚情况,而且从上面我在11g数据库实验结果看,也没发现这两种类型。(有了解的朋友可以告知一二)约束命名规范约束名称建议自己定义一套命名规则,否则使用系统生成的约束名,很难能把它和对应的表、字段联系起来。非空约束 NN_表名_列名唯一约束 UK_表名_列名主键约束 PK_表名外键约束 FK_表名_列名条件约束 CK_表名_列名默认约束 DF_表名_列名如果约束名称

13、超过32位长度,建议应该缩写表名,而不应用NN_表名_数字。不过具体视情况而定,很多时候 DF_表名_列名 这样命名,往往超出了32字符。所以有时候需要缩写表面或是采用其它规则。约束操作约束管理创建各类约束先看一下如何创建主键约束CREATE TABLE DM.DEPT ( DEPTNO NUMBER(2,0) PRIMARY KEY, DNAME VARCHAR2(14), LOC VARCHAR2(13) ) TABLESPACE TBS_DM_DAT ; COMMENT ON TABLE DM.DEPT IS 部门表; COMMENT ON COLUMN DM.DEPT.DEPTNO I

14、S 部门编号; COMMENT ON COLUMN DM.DEPT.DNAME IS 部门名称; COMMENT ON CLOUMN DM.DEPT.LOC IS 部门所在地方;此时它的约束名称是系统创建的。如图所示:如果我们以下面的脚本创建,此时约束如下所示 1 CREATE TABLE DM.DEPT 2 ( 3 DEPTNO NUMBER(2,0), 4 DNAME VARCHAR2(14) , 5 LOC VARCHAR2(13) , 6 CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO) USING INDEX TABLESPACE TBS_DM_IN 7

15、 ) TABLESPACE TBS_DM_DAT ; 8 9 10 11 12 COMMENT ON TABLE DM.DEPT IS 部门表;13 14 COMMENT ON COLUMN DM.DEPT.DEPTNO IS 部门编号;15 16 COMMENT ON COLUMN DM.DEPT.DNAME IS 部门名称;17 18 COMMENT ON CLOUMN DM.DEPT.LOC IS 部门所在地方;19 如果一个表的约束类型比较多,你会看到一堆SYS_CN这样的约束,如果不仔细核对后面的字段,很难一眼看出约束类型、约束对应字段。主键约束的限制文档原文如下:(翻译在下)Res

16、trictions on Primary Key Constraints Primary constraints are subject to the following restrictions:A table or view can have only one primary key.一个表或视图有且只有一个主键None of the columns in the primary key can be LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, or user-define

17、d type. However, the primary key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.主键字段不能为LOB、LOG、LOG RAW、VARRAY、NESTED TABLE、BFILE、REF、TIMESTAMP WITH TIME ZONE或用户定义类型。然而它可以包含TIMESTAMP WITH LOCAL TIME ZONE类型的字段。The size of the primary key cannot exceed approximately one database block.主键大小不能超过一

18、个数据块大小。A composite primary key cannot have more than 32 columns.主键组合键不能超过32列。You cannot designate the same column or combination of columns as both a primary key and a unique key.你不能指定一列或组合列既是主键又是唯一键。You cannot specify a primary key when creating a subview in an inheritance hierarchy. The primary ke

19、y can be specified only for the top-level (root) view.创建一个继承层次结构中的子视图时,你不能指定一个主键。主键可以唯一指定的顶层(根)视图。外键约束ALTER TABLE childTableADD CONSTRAINT FK_xxxx_xxxFOREIGH KEY(columnName)REFERENCES parentTalbe(primaryKeyColumn) ON DELETE CASCADE|SET NULL;ON DELETE SET NULL子句:当主表中的一行数据被删除时,Oracle系统会自动地将所有从表中依赖于它的数

20、据记录的外键改成空值;ON DELETE CASCADE:当主表中的一行数据被删除时,Oracle系统会自动地将所有从表中依赖于它的数据记录删除;注:如果在外键定义中使用了ON DELETE SET NULL 或ON DELETE CASCADE,无论删除操作是在父表这一端还是子表这一端都不会产生违反引用完整性的问题,但是却留下了安全隐患。这两个子句要谨慎使用,只有在不得已时使用,谨记谨记!外键约束对DML与DDL的影响:INSERT:只有操作是在子表或从表这一端时才会产生违反引用完整性约束的问题,父表则不然。DELETE:只有操作是在父表或主表这一端时才会产生违反引用完整性约束的问题,子表则

21、不然。UPDATE:子表父表直接操作都会违反引用完整性约束。两种解决方法:1)先更新子表的引用列为空,再更新父表的主键的列的值,然后把子表的引用列更新成新的父表的值;2)使用ON DELETE SET NULL,先更新父表,然后将子表外键为空的记录更新为新的值。DDL语句:DROP TABLE与TRUNCATE TABLE,操作父表,违反引用完整性约束,子表则不然。外键约束的限制:Restrictions on Foreign Key Constraints Foreign key constraints are subject to the following restrictions:No

22、ne of the columns in the foreign key can be of LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, or user-defined type. However, the primary key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.外键字段不能为LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAM

23、P WITH TIME ZONE, or user-defined type类型,主键可以包含数据类型为TIMESTAMP WITH LOCAL TIME ZONE的字段。The referenced unique or primary key constraint on the parent table or view must already be defined.引用唯一或主键约束,必须是父表中已经定义的。A composite foreign key cannot have more than 32 columns.外键的组合列不能超过32列。The child and parent

24、tables must be on the same database. To enable referential integrity constraints across nodes of a distributed database, you must use database triggers. See CREATE TRIGGER.字表和父表必须在同一个数据库。分布式数据库中,外键不能跨节点,但触发器可以If either the child or parent object is a view, then the constraint is subject to all restr

25、ictions on view constraints. See View Constraints.You cannot define a foreign key constraint in a CREATE TABLE statement that contains an AS subquery clause. Instead, you must create the table without the constraint and then add it later with an ALTER TABLE statement.你不能在CREATE TABLE语句中包含AS子查询子句定义一个

26、外键约束。相反,你必须创建一个没有约束的表,然后添加ALTER TABLE语句。加上一些类似其它约束的限制条件约束非空约束非空约束的限制:1: 你不能在视图约束上指定字段为NULL或NOT NULL值2: 你不能指定一个对象的属性为NULL或NOT NULL。相反,而应使用的IS NOTNULL条件CHECK约束条件约束中的条件与查询语句中的条件相同,但是不能包括以下内容:1)CURRVAL,NETXTVAL,LEVEL和ROWNUM这样的伪列(PSEUDOCOLUMNS);2)引用其它行中值的查询语句;3)SYSDATE,USER,USERENV和UID的函数调用。文档原文如下:Restri

27、ctions on NOT NULL Constraints NOT NULL constraints are subject to the following restrictions:You cannot specify NULL or NOT NULL in a view constraint.You cannot specify NULL or NOT NULL for an attribute of an object. Instead, use a CHECK constraint with the IS NOT NULL condition.唯一约束唯一约束的限制:文档原文如下:

28、Restrictions on Unique Constraints Unique constraints are subject to the following restrictions:None of the columns in the unique key can be of LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, OBJECT, REF, TIMESTAMP WITH TIME ZONE, or user-defined type. However, the unique key can contain a column of TIME

29、STAMP WITH LOCAL TIME ZONE.当字段类型为LOB、LOG、LONG RAW、 VARRAY、NESTED TABLE、OBJECT、REF、TIMESTAMP、用户定义类型时,不能在字段上定义唯一性约束。当数据类型为TIMESTAMP WITH LOCAL TIME ZONEA composite unique key cannot have more than 32 columns.组合字段定义的唯一索引,字段个数不能超过32个You cannot designate the same column or combination of columns as both

30、a primary key and a unique key.你不能指定同一字段或组合字段即为主键又是唯一键You cannot specify a unique key when creating a subview in an inheritance hierarchy. The unique key can be specified only for the top-level (root) view.约束管理删除约束ALTER TABLE DM.EMPDROP CONSTRAINT SYS_C00115525;CASCADE子句用来删除存在有完整性关系的约束。当然你也可以用如下语法AL

31、TER TABLE DM.EMPDROP UNIQUE (COMM);添加约束添加非空约束ALTER TABLE DM.EMPMODIFY(MGR CONSTRAINT CK_EMP_MGR NOT NULL);添加其他约束ALTER TABLE DM.EMPADD CONSTRAINT CK_EMP_SAL CHECK(SAL 0 AND SAL create table example (id number primary key, name varchar2(20);Table createdSQL create table example2 (id number,name varcha

32、r2(20) ,primary key (id,name);Table createdSQL desc example2;Name Type Nullable Default Comments- - - - -ID NUMBER NAME VARCHAR2(20) 2.创建表后,添加主键约束:语法:alter table 表名 add primary key (列名1,列名2,.);可以多列构成主键。如:SQL alter table example2 drop primary key; -删除主键Table alteredSQL alter table example2 add primar

33、y key (id,name); -添加主键Table altered3.为主键命名:显式命名主键:语法:alter table 表名 add constraint 约束名称 primary key (列名1,列名2 ,.);SQL alter table example2 drop primary key;Table alteredSQL alter table example2 add constraint pk_example primary key (id);再看主键约束:SQL select table_name,constraint_name,constraint_type,sta

34、tus2 from user_constraints where table_name=EXAMPLE2;TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS- - - -EXAMPLE2 PK_EXAMPLE P ENABLED4.修改主键约束:4.1 禁用/启用主键:alter table 表名 disable/enable primary key;注:禁用后可插入违法数据,但有违法数据时无法启用主键,将违法数据修改才可以。SQL alter table example2 disable primary key;Table alteredSQL alter table ex

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁