• 数据库的约束


    一、约束的定义

    约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作。约束可以是列一级别的 也可以是表级别的。

    二、约束的功能

    实现一些业务规则,防止无效的垃圾数据进入数据库,维护数据库的完整性(完整性指正确性与一致性)。从而使数据库的开发和维护都更加容易。

    三、约束的分类

    1、主键约束

    定义:唯一的标识表中的每一行,不能重复,不能为空。 创建主键或唯一约束后,数据库会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)。需要注意的是:每个表只能有且有一个主键约束。
    命名规则:PK_表名
    限制:一个表或视图有且只有一个主键;主键大小不能超过一个数据块大小;主键组合键不能超过32列;不能指定一列或组合列既是主键又是唯一键;创建一个继承层次结构中的子视图时,不能指定一个主键。主键可以唯一指定的顶层(根)视图。

    (1)单字段主键

    在定义列的同时指定主键,语法规则:字段名 数据类型 Primary Key [默认值]

    (2)多字段联合主键

    主键由多个字段联合组成。语法规则:Primary Key[字段1,字段2,…,字段n]

    2、外键约束

    定义:用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等SQL性能的额外开销,不少系统里面通过业务逻辑控制来取消外键约束。
    主表(父表):对于两个具有关联关系的表而言,相关联字段中的主键所在的那个表即是主表。
    从表(子表):对于两个具有关联关系的表而言,相关联字段中的外键所在的那个表即是从表。
    命名规则:FK_表名_列名
    限制:引用唯一或主键约束,必须是父表中已经定义的;外键的组合列不能超过32列;字表和父表必须在同一个数据库,分布式数据库中,外键不能跨节点,但触发器可以;不能在CREATE TABLE语句中包含AS子查询子句定义一个外键约束,相反,你必须创建一个没有约束的表,然后添加ALTER TABLE语句;

    3、唯一约束

    定义:在表中每一行中所定义的这列或这些列的值都不能相同。必须保证唯一性。否则就会违法约束条件。
    命名规则:UK_表名_列名
    限制:不能在视图约束上指定字段为NULL或NOT NULL值;不能指定一个对象的属性为NULL或NOT NULL,相反,而应使用的IS [NOT] NULL条件CHECK约束。

    4、非空约束

    定义:约束的列不能为NULL值。否则就会报错
    命名规则:NN_表名_列名
    限制:组合字段定义的唯一索引,字段个数不能超过32个;不能指定同一字段或组合字段即为主键又是唯一键

    5、条件约束

    定义:表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。
    命名规则:CK_表名_列名
    限制:条件约束中的条件与查询语句中的条件相同,但是不包括CURRVAL,NETXTVAL,LEVEL和ROWNUM这样的伪列(PSEUDOCOLUMNS),还不能引用其它行中值的查询语句,不可以调用SYSDATE,USER,USERENV和UID的函数。

    四、约束的操作

    1,添加约束

    (1)添加非空约束

    ALTER TABLE tables
    MODIFY(MGR CONSTRAINT 约束名  NOT NULL);
    
    • 1
    • 2

    (2)添加其他约束

    ALTER TABLE tables CONSTRAINT 约束名(条件);
    
    • 1

    2,删除约束

    ALTER TABLE tables  CONSTRAINT 约束名;
    
    • 1

    3,重命名约束

    ALTER TABLE tables  
    RENAME CONSTRAINT 约束名 TO 新约束名;
    
    • 1
    • 2

    4,禁用约束

    ALTER TABLEDISABLE CONSTRAINT 约束名 [CASCADE];
    ALTER TABLEDISABLE PRIMARY KEY CASCADE; -- CASCADE子句用来关闭存在有完整性关系的约束
    
    • 1
    • 2

    5,启用约束

    使用ENABLE不会将主键约束与外键约束同时打开,只能对主键约束与外键约束分别使用ENABLE CONSTRAINT 子句打开
    ALTER TABLE 表 ENABLECONSTRAINT 约束名 [CASCADE];
    
    • 1
    • 2
  • 相关阅读:
    【JVM基础】程序计数器
    webpack5 之 优化效率工具 ( 进度条、速度分析 、打包后提交分析)
    nginx两台负载均衡服务器之间使用keepalived实现高可用
    7-3 最低通行费
    Java流程控制
    【c++】四种类型转换的用法
    【mysql】linux安装安装 mysql
    揭开Vue的响应式秘密:深入剖析Vue2与Vue3的差异与革新
    Linux学习笔记--Linux文件管理类命令详解
    Linux中断底半部机制总结
  • 原文地址:https://blog.csdn.net/weixin_42011858/article/details/126230876