当前位置:网站首页>数据库的约束
数据库的约束
2022-08-10 09:59:00 【晓之以理的喵~~】
一、约束的定义
约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行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);
(2)添加其他约束
ALTER TABLE tables CONSTRAINT 约束名(条件);
2,删除约束
ALTER TABLE tables CONSTRAINT 约束名;
3,重命名约束
ALTER TABLE tables
RENAME CONSTRAINT 约束名 TO 新约束名;
4,禁用约束
ALTER TABLE 表 DISABLE CONSTRAINT 约束名 [CASCADE];
ALTER TABLE 表 DISABLE PRIMARY KEY CASCADE; -- CASCADE子句用来关闭存在有完整性关系的约束
5,启用约束
使用ENABLE不会将主键约束与外键约束同时打开,只能对主键约束与外键约束分别使用ENABLE CONSTRAINT 子句打开
ALTER TABLE 表 ENABLECONSTRAINT 约束名 [CASCADE];
边栏推荐
- CSDN 21 Days Learning Challenge - Polymorphism (05)
- 反射效率为什么低?
- 06 【生命周期 模板引用】
- Optimistic and pessimistic locking
- dedecms支持Word内容一键上传
- JWT:拥有我,即拥有权力
- 09 【Attributes继承 provide与inject】
- [Internet of Things Architecture] The most suitable open source database for the Internet of Things
- VBA:获取指定数值在指定一维数组中的位置
- Controller层代码这么写,简洁又优雅!
猜你喜欢
Numpy学习
「业务架构」TOGAF建模:组织分解图(组织映射)
Chapter 3 Search and Graph Theory (3)
DeepFake换脸诈骗怎么破?让他侧个身
【数据仓库】什么是 Azure Synapse,它与 Azure Data Bricks 有何不同?
【API Management】What is API Management and why is it important?
关于编程本质那些事
腾讯发布四足机器人 Max 二代版本,梅花桩上完成跳跃、空翻
【STL】位图的介绍使用以及代码的模拟实现
How to break the DeepFake face-changing scam?turn him over
随机推荐
讯飞翻译机抢镜背后,跨语种沟通迈入全新时代
13 【script setup 总结】
Numpy学习
DeepFake换脸诈骗怎么破?让他侧个身
解决ASP.NET Core在Task中使用IServiceProvider的问题
Static关键字及应用,继承的概念
ELK入门
LeetCode Algorithm 1403. 非递增顺序的最小子序列
武功修炼:内功
08 【Props 组件事件】
因子分析(SPSS)
属性动画QPropertyAnimation
2022年固定资产管理系统的概况
重学冒泡排序
The Generation of Matlab Symbolic Functions and the Calculation of Its Function Values
线程池的基本概念、结构、类
[System Design] S3 Object Storage
VBA: 遍历文件抓取指定条件的数据
【微服务架构】微服务与SOA架构(2)
单例模式基类