zoukankan      html  css  js  c++  java
  • 数据库的约束简介

    约束的简介

    数据的完整性是指数据的正确性和一致性,可以通过定义表时定义完整性约束,也可以通过规则,索引,触发器等。约束分为两类:行级和表级,处理机制是一样的。行级约束放在列后,表级约束放在表后,多个列共用的约束放在表后。

    完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。

    约束类型

    总的来说有五种:唯一性和主键约束、外键约束、检查约束、空值约束、默认值约束,

    有五大关键词,UNIQUE和Primary Key, Foreign Key, CHECK, NOT NULL, DEFAULT

    1。唯一性和主键约束。

    要求某一列,或几列不能有重复的值,建立主键约束和唯一约束时,Oralce会基于约束列自动建立唯一索引;主键约束不允许为NULL,唯一约束允许为NULL,一张表只能建立一个主键约束。唯一性和主键约束类似,只是关键词不同而已,语法一致。

    创建约束

    CREATE TABLE TABLE_NAME
    (
        COL1 VARCHAR2(32) NOT NULL PRIMARY KEY,
    )

    CREATE TABLE TABLE_NAME
    (
        COL1 VARCHAR2(32) NOT NULL CONSTRAINT PK_ID PRIMARY KEY,
    )

    CREATE TABLE TABLE_NAME
    (
        COL1 VARCHAR2(32) NOT NULL,
        COL2 VARCHAR2(32) NOT NULL Foreign Key,
        CONSTRAINT PK_TABLE_NAME PRIMARY KEY(COL1,COL2)
    )

    修改约束

    ALTER TABLE Table_Name
    ADD CONSTRAINT PK_Table_Name PRIMARY KEY NONCLUSTERED(Col1)【这里表明了是聚集还是非聚集主键索引】

    如果唯一性约束保护多个数据列,那么唯一性约束要作为表约束增加。语法如下:
    CONSTRAINT CONSTRAINT_NAME (COL1,COL2) UNIQUE USING INDEX TABLESPACE (TABLESPACE_NAME) STORAGE (STORED CLAUSE)
     

     2。外键约束。

    剩下的约束写法都是差不多,这里就不多举例了。

    CREATE TABLE TABLE_NAME
    (
        COL1 VARCHAR2(32) NOT NULL REFERENCES PRIMARY_TABLE(PRIMARY_COL) ON DELETE CASCADE,
    )

    CREATE TABLE TABLE_NAME
    (
        COL1 VARCHAR2(32) NOT NULL,
        CONSTRAINT FK_TABLE_NAME FOREIGN KEY REFERENCES PRIMARY_TABLE(PRIMARY_COL) ON DELETE SET NULL
    )
     

    这里需要注意的是ON 后面的内容。这个是关联的关键。与删除修改密切相关。

    • NO ACTION:更新或删除父表中的数据时,如果会使子表中的外键违反引用完整性,该动作将被禁止执行。
    • CASCADE: 当父表中被引用列的数据被更新或删除时,子表中的相应的数据也被更新或删除。
    • SET NULL:当父表数据被更新或删除时,子表中的相应数据被设置成NULL值,前提是子表中的相应列允许NULL值。
    • SET DEFAULT:当父表数据被更新或删除时,子表中的数据被设置成默认值。前提是子表中的相应列设置有默认值。

    3。检查约束。

    检查列的类型和范围。语法:CONSTRAINT [constraint_name] CHECK (condition); 比如:check(Age >2)

    4。空值约束、5。默认约束

    还有两种方式,一种是默认值(default sysdate或者 default 1),

    一种是限制空值Not Null【NOT NULL只能在列级定义】,

    这也可以看成是约束,它的作用也是进行数据的完整性控制。

    修改默认约束:

    ALTER TABLE TABLENAME
    ADD CONSTRAINT DF_TABLENAME_COL1 DEFAUIT('22') FOR COL1

     
    修改空值约束

    修改NOT NULL是四个约束当中最特殊的,直接用Modify Col_Name NOT NULL 即可

    删除、禁用、启用约束、修改约束名

    ALTER TABLE table_name

    DROP CONSTRAINT constraint_name(删除约束)

    DISABLE CONSTRAINT constraint_name;(启用约束)

    ENABLE CONSTRAINT constraint_name;(禁用约束)ALTER TABLE table_name

    RENAME CONSTRAINT old_constraint_name TO new_constraint_name(修改约束名)

    select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R';【禁用所有外键约束】

    select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R';【启用所有外键约束】

    select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R';【删除所有外键约束 】

    所有约束信息:SELECT * FROM user_constraints

  • 相关阅读:
    【搜索引擎Jediael开发笔记1】搜索引擎初步介绍及网络爬虫 2014-05-23 14:07 515人阅读 评论(0) 收藏
    【搜索引擎基础知识3】搜索引擎相关开源项目及网站 2014-05-23 11:44 757人阅读 评论(0) 收藏
    HtmlParser基础教程 分类: C_OHTERS 2014-05-22 11:33 1649人阅读 评论(1) 收藏
    【搜索引擎Jediael开发4】V0.01完整代码 分类: H_HISTORY 2014-05-21 21:35 470人阅读 评论(0) 收藏
    学习金字塔 分类: T_TALENT 2014-05-21 09:25 331人阅读 评论(0) 收藏
    【搜索引擎Jediael开发笔记3】使用HtmlParser提取网页中的链接 分类: H3_NUTCH 2014-05-20 20:50 1211人阅读 评论(0) 收藏
    Java解析HTML之HTMLParser使用与详解 分类: C_OHTERS 2014-05-19 21:46 2309人阅读 评论(0) 收藏
    【搜索引擎Jediael开发笔记2】使用HttpClient下载网页至本地文件 分类: C_OHTERS 2014-05-19 15:07 1108人阅读 评论(0) 收藏
    HttpClient基础教程 分类: C_OHTERS 2014-05-18 23:23 2600人阅读 评论(0) 收藏
    【搜索引擎基础知识2】网络爬虫的介绍 2014-05-16 14:10 395人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/netsql/p/1729162.html
Copyright © 2011-2022 走看看