「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。
数据完整性 ( 约束 )
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability),它是防止数据库中存在不符合语义规定的数据和因错误信息的输入造成无效操作或错误信息而提出的。
例如:
1.数据类型 年龄使用什么类型?
2.格式是否正确 身份证号,可以是15位也可以是18位
3.范围 性别可选择“男”、“女”
4.是否允许重复 银行卡号不允许重复
数据完整性分为三类:
1. 实体完整性(Entity Integrity)
实体完整性要求每一个表中的主键字段都不能为空(非空)或者重复的值(唯一)。
- 唯一约束(UNIQUE)
- 主键约束(PRIMARY KEY)
隐含非空约束和唯一约束
2. 域完整性(Domain Integrity)
域完整性指列的值域的完整性。如数据类型、格式、值域范围、是否允许空值等
- 限制数据类型(检查约束 CHECK)
示例:
1)check(列名 in(值1,值2......))
2)check (列名>=0 and 列名<=100)
3)check(name like 'M%')
- 默认值 (DEFAULT) 没有约束名称,也不能用CONSTRAINT关键字
- 非空约束(NOT NULL) 没有约束名称,也不能用CONSTRAINT关键字
3. 参照完整性 ( Referential Integrity )
外键约束(FOREIGN KEY)
完整语句:
CONSTRAINT 约束名称 FOREIGN KEY (列名) REFERENCES 引用表名 (引用列名)
建表语句:
Create table 表名(列 类型 REFERENCES 引用表名 (引用主键)) 注意,没有 CONSTRAINT 约束名称 FOREIGN KEY,也就是说:不支持对约束命名,也不用写出FOREIGN KEY
- 当更新、删除、插入一个表中的数据时,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确。
- 引用完整性要求关系中不允许引用不存在的实体。
- 引用完整性与实体完整性是关系模型必须满足的完整性约束条件。
4. 添加约束
- 先建表,后创建约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名称 约束类型 (列名)
- 建表时直接加约束(不适用外键约束,外键有它自已的格式):
CREATE TABLE表名(
列名 类型 [CONSTRAINT 约束名称] 约束类型
)
CREATE TABLE表名(
列名 类型 ,
[CONSTRAINT 约束名称] 约束类型(列名)
)
CREATE TABLE表名(
列名 类型 约束类型 --这种格式仅适用于非空和默认值,非空和默认值可以同时存在,例如:sex number(1) not null defalut 1
)
5. 删除约束
alter table 表名 drop CONSTRAINT 约束名称
6. 启用约束
alter table 表名 MODIFY CONSTRAINT 约束名称 enable
alter table 表名 MODIFY 列名 not null
alter table 表名 MODIFY 列名 default 值
7. 禁用约束
alter table 表名 MODIFY CONSTRAINT 约束名称 disable
alter table 表名 MODIFY 列名 null
alter table 表名 MODIFY 列名 default null
8. 查询约束
SELECT TABLE_NAME , CONSTRAINT_NAME,CONSTRAINT_TYPE,STATUS FROM USER_CONSTRAINTS
SELECT * FROM USER_CONS_COLUMNS