约束
约束概念
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是应防止数据库中存 在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。
🚀 数据的完整性要从以下四个方面考虑:
- 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录
- 域完整性(Domain Integrity):例如:年龄范围0-120,性别范围“男/女”
- 引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门
- 用户自定义完整性(User-defined Integrity):例如:用户名唯一、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5倍。
约束类型
- 键约束:主键约束、外键约束、唯一键约束
- Not NULL约束:非空约束
- Check约束:检查约束
- Default约束:默认值约束
- 自增约束
表级约束列级约束
其中键约束和检查约束是表级约束,既不仅要看约束字段当前单元格的数据,还要看其他单元格的数据。
非空约束和默认值约束都是列级约束,即约束字段只看当前单元格的数据即可,和其他单元格无关。
所有的表级约束都可以在 infomation_schema.table_constraints
表中查看。
select * from information_schema.table_constraints WHERE table_name = '表名称';
约束和索引
1、约束是用来对数据业务规则和数据完整性进行实施、维护。约束的作用范围仅限在当前数据库,约束可以被当做数据库对象来处理,它们具有名称和关联模式。是逻辑约束,不会因为设置约束而额外占用空间。
2、索引是一个单独、物理的存储在数据页上的数据库结构,它是表中一列或若干列值的集合和相应的指向表中数据值的物理标识数据页的逻辑指针清单(类似于新华字典的目录索引页)。索引的存在会增加数据库的存储空间,也会使插入、修改数据的时间开销变多(因为插入和修改数据时,索引也要随之变动),但是可以大大提高查询速度。因此应该在键列、或其他经常要查询、排序、按范围查找的列上建立索引,而对于在查询中很少使用和参考的列、修改非常频繁的列,值很少的列(例如性别只有男和女)等列上不应该创建索引。
约束和索引的不同:
- 约束是一个逻辑概念,不会占用物理空间。
- 索引是一个物理概念,会占用物理空间。
Mysql会在主键、唯一键、外键列上自动创建索引,其他列需要建立索引的话,需要手动创建。
其中主键删除,对应的索引也会删除。
删除唯一键的方式是通过删除对应的索引来实现的。
删除外键,外键列上的索引还在,如果需要删除,需要单独删除索引。
DDL语句
查看表约束
SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称';
或
SHOW CREATE TABLE 表名;
查看表索引
SHOW INDEX FROM 表名称;
主键约束
primary key
主键分为单列主键和复合主键:
✨