常见的表约束类型包括:
1.主键约束(Primary Key Constraint):定义一列或一组列作为唯一标识表中的每一行。主键用于确保唯一性和数据的完整性。
2.唯一约束(Unique Constraint):确保一列或一组列中的所有值都是唯一的,但可以有空值。它防止重复的数据。
3.外键约束(Foreign Key Constraint):用于确保表之间的关系的完整性。它定义了对其他表中的主键或唯一键的引用,可以用于建立表之间的关联。
4非空约束(Not Null Constraint):指定一列不允许包含空值(NULL)。它确保必须为该列提供值。
5.默认约束(Default Constraint):定义一列的默认值,如果在插入新行时没有提供该列的值,则将使用默认值。
6.检查约束(Check Constraint):定义一列的取值范围或条件。它用于限制该列可以接受的数据。
这些约束可以单独应用于列或多个列,也可以组合使用。通过使用表的约束,可以在数据库层面上对数据进行验证和限制,以提高数据的完整性和一致性。
2.数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
案例:
创建一个班级表,包含班级名和班级所在的教室。
站在正常的业务逻辑中:
1.如果班级没有名字,你不知道你在哪个班级
2.如果教室名字可以为空,就不知道在哪上课
所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是“约束”。
插入数据时,没有给教室数据插入失败:
2.当超过五位时,系统就按照插入的数据原样的输出
最后解答为什么我们创建的默认是 int(10)?
1.首先,因为我们创建的类型是 unsigned类型,而 unsigned 的取值范围为【0,2^32-1】;
2.而 2^32-1 的数值范围是 10位整数,因此当我们查看时默认的是 int(10)
小结:使用 ZEROFILL 约束可以方便地进行数字显示和格式化,特别适用于需要固定位数的标识符或编码的情况。
2.非空性:主键列的值不能为 NULL,即主键列不能为空。
3.唯一标识性:主键用于唯一标识表中的每一行,从而方便对表中的数据进行准确定位和关联。
【案例】
创建表的时候直接在字段上指定主键
主键约束:主键对应的字段中不能重复,一旦重复,操作失败。
当表创建好以后但是没有主键的时候,可以再次追加主键
删除主键
复合主键
在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段
作为主键,可以使用复合主键
通过指定主键约束,可以确保表中的数据具有唯一的标识,并对数据的完整性进行验证和保护。
2.自增长字段必须是整数
3.一张表最多只能有一个自增长
【案例】
在插入后获取上次插入的 AUTO_INCREMENT 的值(批量插入获取的是第一个值)
【 索引】
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结
构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。
数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。
通过自增长约束,可以轻松生成并维护具有唯一标识的行,减少了手动提供标识符的工作和可能的冲突。自增长列通常用作主键列,以实现高效的数据插入和查找。
2.可以包含 NULL 值:唯一键列允许包含 NULL 值。由于 NULL 不等于 NULL,因此两个包含 NULL 值的行不会违反唯一键约束。
关于唯一键和主键的区别:
1.我们可以简单理解成,主键更多的是标识唯一性的;
2.而唯一键更多的是保证在业务上,不要和别的信息出现重复。
唯一约束不能重复,但可以为空:
通过使用唯一键约束,可以确保表中的列或列组合具有唯一的值,从而确保数据的完整性和一致性。与主键约束相比,唯一键约束允许空值,并且可以应用于多个列,提供更大的灵活性。
2.数据完整性:外键约束确保关联的数据在父表中存在,从而保持数据的完整性和一致性。它防止在子表中插入无效的或不一致的数据。
3.可选性:外键列可以为空或包含 NULL 值,但如果包含值,则该值必须在父表中存在。
要使用外键约束,需要满足以下条件:
1.子表和父表之间必须存在关联的列,子表中的列用于引用父表中的列。
2.父表中的关联列必须具有唯一约束或主键约束。
语法
foreign key (字段名) references 主表(列)
【案例】
对上面的示意图进行设计:
先创建主键表
再创建从表:
正常进行插入数据:
插入一个班级号为30的学生,因为没有这个班级,所以插入不成功:
插入班级id为null,比如来了一个学生,目前还没有分配班级:
如何理解外键约束:
首先我们承认,这个世界是数据很多都是相关性的。
理论上,上面的例子,我们不创建外键约束,就正常建立学生表,以及班级表,该有的字段我们都有。
此时,在实际使用的时候,可能会出现什么问题?
1.有没有可能插入的学生信息中有具体的班级,但是该班级却没有在班级表中?
2.比如一个年级只开了26个班,但是在上课的学生里面竟然有27班的学生(这个班目前并不存在),这很明显是有问题的。
因为此时两张表在业务上是有相关性的,但是在业务上没有建立约束关系,那么就可能出现问题。
解决方案就是通过外键完成的。建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。
通过使用外键约束,可以确保表之间的关联关系,并保持数据的完整性。它可以防止插入无效的引用数据或导致不一致的数据。外键约束是维护表之间关系的重要工具,并有助于确保关联数据的一致性。
2.这些约束可以在创建表时指定,也可以使用 alter table 语句添加、修改或删除;
3.它们帮助确保表中的数据满足特定的规则和关联条件,提供了数据的一致性和完整性保证;
4.根据实际需求和数据模型设计,可以结合使用不同类型的约束来实现所需的业务逻辑和数据限制。
免责申明:
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!
《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu
《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack