目录
序言
(一)空属性
(二)默认值
(三)列描述
(四)zerofill
(五)主键
(六)自增长
(七)唯一键
(八)外键
总结
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。
定义:
常见的表约束类型包括:
主键约束(Primary Key Constraint):定义一列或一组列作为唯一标识表中的每一行。主键用于确保唯一性和数据的完整性。
唯一约束(Unique Constraint):确保一列或一组列中的所有值都是唯一的,但可以有空值。它防止重复的数据。
外键约束(Foreign Key Constraint):用于确保表之间的关系的完整性。它定义了对其他表中的主键或唯一键的引用,可以用于建立表之间的关联。
非空约束(Not Null Constraint):指定一列不允许包含空值(NULL)。它确保必须为该列提供值。
默认约束(Default Constraint):定义一列的默认值,如果在插入新行时没有提供该列的值,则将使用默认值。
检查约束(Check Constraint):定义一列的取值范围或条件。它用于限制该列可以接受的数据。
这些约束可以单独应用于列或多个列,也可以组合使用。通过使用表的约束,可以在数据库层面上对数据进行验证和限制,以提高数据的完整性和一致性。
案例:
创建一个班级表,包含班级名和班级所在的教室。
站在正常的业务逻辑中:
所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是“约束”。
在 MySQL 中,可以使用默认值约束(Default Constraint)来为表中的列指定默认值。这样,在插入新行时,如果没有提供该列的具体值,将自动使用默认值。
以下是一个示例,创建一个带有默认值约束的 users
表:
name
和 email
列都被定义为具有默认值。当插入数据时,如果不提供指定列的值,则会自动使用默认值。 默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值
其次。如果要修改现有表中的列的默认值,可以使用 ALTER TABLE
命令:
在 MySQL 中,可以使用列描述(Column Description)来为表中的列添加描述信息。列描述是一个可选的元数据属性,用于提供关于列的更多详细信息,如列的用途、含义或任何其他相关说明。
以下是一个示例,创建一个带有列描述的 t1表:
通过desc查看不到注释信息:
通过show可以看到:
在 MySQL 中,ZEROFILL
是一种表约束,用于在存储数值类型的列中填充零以达到指定的位数。它将使数值在显示时占据固定的位数,并在必要时用零填充不足的部分。
要使用 ZEROFILL
约束,您需要将其与数值列一起使用,如 INT
、BIGINT
、FLOAT
、DOUBLE
等。在列定义中,通过添加 ZEROFILL
关键字并指定所需的位数,来启用零填充。
可以看到int(10),这个代表什么意思呢?整型不是4字节码?这个10又代表什么呢?其实没有zerofill这个属性,括号内的数字是毫无意义的。a和b列就是前面插入的数据,如下:
但是对列添加了zerofill属性后,显示的结果就有所不同了。修改 t2 表的属性:
对a列添加了zerofill属性,再进行查找,返回如下结果:
【结论】
为什么是这样呢?我们可以用hex函数来证明:
紧接着,我们把 a中的 int() 中的值改为5之后,在来进行插入操作:
插入操作如下:
【结论】
当我们查看当前表时,可以发现一个问题:
最后解答为什么我们创建的默认是 int(10)?
小结:使用
ZEROFILL
约束可以方便地进行数字显示和格式化,特别适用于需要固定位数的标识符或编码的情况。
在 MySQL 中,主键约束(Primary Key Constraint)用于定义表中一列或多列作为唯一标识表中的每一行的约束条件。主键约束是一种重要的约束,用于确保数据的唯一性和完整性。
主键约束有以下特点:
【案例】
在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段
作为主键,可以使用复合主键
通过指定主键约束,可以确保表中的数据具有唯一的标识,并对数据的完整性进行验证和保护。
在 MySQL 中,自增长(Auto_increment)是一种用于表的列的约束,它允许数据库自动为每个新插入的行分配唯一的递增值。自增长列通常用作表的主键列,以确保每个新插入的行都具有唯一且递增的标识符。
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:
【案例】
在插入后获取上次插入的 AUTO_INCREMENT 的值(批量插入获取的是第一个值)
【 索引】
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结
构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。
数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。
通过自增长约束,可以轻松生成并维护具有唯一标识的行,减少了手动提供标识符的工作和可能的冲突。自增长列通常用作主键列,以实现高效的数据插入和查找。
在 MySQL 中,唯一键(Unique Key)是一种约束,用于确保表中的列或列组合的值在整个表中是唯一的。唯一键约束类似于主键约束,但它允许空值(NULL),并且可以应用于多个列。
唯一键约束有以下特点:
关于唯一键和主键的区别:
通过使用唯一键约束,可以确保表中的列或列组合具有唯一的值,从而确保数据的完整性和一致性。与主键约束相比,唯一键约束允许空值,并且可以应用于多个列,提供更大的灵活性。
在 MySQL 中,外键(Foreign Key)是一种约束,用于确保表之间的数据完整性和一致性。外键定义了表之间的关联关系,它基于一个表中的列值与另一个表中的列值之间的关系。
外键约束有以下特点:
要使用外键约束,需要满足以下条件:
语法
- foreign key (字段名) references 主表(列)
【案例】
对上面的示意图进行设计:
首先我们承认,这个世界是数据很多都是相关性的。
理论上,上面的例子,我们不创建外键约束,就正常建立学生表,以及班级表,该有的字段我们都有。
此时,在实际使用的时候,可能会出现什么问题?
- 有没有可能插入的学生信息中有具体的班级,但是该班级却没有在班级表中?
- 比如一个年级只开了26个班,但是在上课的学生里面竟然有27班的学生(这个班目前并不存在),这很明显是有问题的。
因为此时两张表在业务上是有相关性的,但是在业务上没有建立约束关系,那么就可能出现问题。
解决方案就是通过外键完成的。建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。
通过使用外键约束,可以确保表之间的关联关系,并保持数据的完整性。它可以防止插入无效的引用数据或导致不一致的数据。外键约束是维护表之间关系的重要工具,并有助于确保关联数据的一致性。
以上便是关于mysql表的约束的全部内容了。接下来,简单的回顾下本文内容!!!
到此,关于本文便讲解完毕了。感谢大家的观看与支持!!!