【MySQL】表的约束

文章目录

  • 表的约束
    • 什么是约束
    • 空属性

表的约束

什么是约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是 email,要求是唯一的。

在 MySQL 中,约束(Constraints)是指在创建表时规定的对表中数据进行限制的条件。它可以对表中某列或某几列添加一些限制条件,以保证表中的数据符合要求。MySQL 中的约束包括以下几种:

  • 主键约束(Primary Key Constraint):用于标识表中每条记录的唯一性,每张表只能有一个主键,主键值不能重复且不能为空。

  • 唯一约束(Unique Constraint):用于保证某个列的数据唯一性,每个表可以有多个唯一约束。

  • 非空约束(Not Null Constraint):用于保证某个列的值不能为空,一个表中可以有多个非空约束。

  • 外键约束(Foreign Key Constraint):用于关联两个表的数据,确保两个表之间的关联关系是有效的。外键约束必须在关联表的列上定义,它会限制在被关联的表中不能存在没有对应主键或唯一键值的记录。

空属性

MySQL 中的空属性指的是一个字段没有值的情况,可以使用 null 关键字来表示。null 是一个特殊的值,表示一个未知的、不存在的或不适用的值。与之相对的是空字符串(‘’),它表示一个空的字符串值,不同于 null。在 MySQL 中,可以在列定义时指定该列是否允许为空。如果列允许为空,则该列可以包含 null 值;否则,该列必须包含非 null 值。

空属性在数据库中很常见,比如一个订单表中,如果订单尚未付款,则该订单的付款时间字段可能为空。在查询时,可以使用 is null 或 is not null 运算符来判断某个字段是否为空。

数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。

示例:

创建一个班级表,包含班级名和班级所在的教室。
站在正常的业务逻辑中:

  • 如果班级没有名字,你不知道你在哪个班级
  • 如果教室名字可以为空,就不知道在哪上课
    所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是约束。
mysql> create table if not exists `myclass`(
    -> class_name varchar(20) not null,
    -> class_room varchar(20) not null
    -> )engine=InnoDB default charset=utf8;
Query OK, 0 rows affected (0.04 sec)

mysql> desc myclass;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| class_name | varchar(20) | NO   |     | NULL    |       |
| class_room | varchar(20) | NO   |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into `myclass` values('104_class', 'room301');
Query OK, 1 row affected (0.01 sec)

mysql> insert into `myclass` values('105_class', 'room302');
Query OK, 1 row affected (0.00 sec)

mysql> select * from myclass;
+------------+------------+
| class_name | class_room |
+------------+------------+
| 104_class  | room301    |
| 105_class  | room302    |
+------------+------------+
2 rows in set (0.00 sec)

mysql> insert into myclass values ('106_class', null);
ERROR 1048 (23000): Column 'class_room' cannot be null
mysql> insert into myclass (class_name) values ('106_class');
ERROR 1364 (HY000): Field 'class_room' doesn't have a default value
mysql> insert into myclass (class_room) values ('302');
ERROR 1364 (HY000): Field 'class_name' doesn't have a default value

【MySQL】表的约束_第1张图片

你可能感兴趣的:(MySQL,mysql,android,adb)