数据库的约束

简介: 数据库的约束

一、约束的定义

约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行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];
相关文章
|
6月前
|
关系型数据库 MySQL 数据库
MySQL数据库——约束
MySQL数据库——约束
|
6月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
56 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库基础:约束
约束是对数据库表中字段施加的规则,确保数据的正确性、有效性和完整性。主要分为非空约束、唯一约束、默认约束、主键约束和外键约束。非空约束禁止字段值为null;唯一约束确保字段值唯一,允许null值重复;默认约束设定默认值;主键约束结合非空与唯一约束,并可设为自增型;外键约束则通过关联其他表的主键,保证数据一致性。检查约束确保字段值满足特定条件。
48 1
|
6月前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
124 0
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
340 0
|
5月前
|
数据采集 关系型数据库 MySQL
MySQL数据库基础第三篇(约束)
MySQL数据库基础第三篇(约束)
|
6月前
|
数据库
如何解决逻辑删除is_del与数据库唯一约束冲突
如何解决逻辑删除is_del与数据库唯一约束冲突
138 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
45 5
|
5月前
|
数据库 数据库管理 索引
Liquibase中的约束与索引,让你的数据库管理如丝般顺滑
【Liquibase教程】数据库变更管理利器!学会添加主键、外键、检查约束和索引,提升开发效率。开源工具Liquibase帮你轻松控制数据库版本,确保数据完整性和一致性。示例代码教你如何在Liquibase中创建表并定义各种约束,让数据库管理更加高效。下次见!
Liquibase中的约束与索引,让你的数据库管理如丝般顺滑
|
6月前
|
存储 关系型数据库 数据库
关系型数据库的数据完整性约束
【5月更文挑战第12天】关系型数据库的数据完整性约束
81 2