0


【MySQL】一文带你了解数据库约束

文章目录

1. 约束类型

作用:
数据库约束是用于限制数据输入或数据更新的规则。数据库约束确保在表中只能插入符合规则的数据,以确保数据的完整性和一致性。
常见的数据库约束包括:

  1. 主键约束:用于唯一标识表中的每一行数据,确保数据唯一性和完整性。
  2. 外键约束:用于确保表之间数据的关系正确性,保证引用表中的数据必须存在于被引用的表中。
  3. 非空约束:用于确保列中的值不为空。
  4. 唯一约束:用于确保列中的值不重复。
  5. 默认约束:用于设置默认值,当插入数据时如果未提供该值,则数据库将使用默认值。
  6. 检查约束:用于确保列中的值符合特定的条件或表达式。
  7. 触发器约束:用于在特定情况下自动执行操作,如插入或删除数据时执行某项操作。

2.PRIMARY KEY:主键约束

概念:
主键约束是一种用于限制表中唯一标识每行记录的数据库约束。主键约束可以确保表中每行的唯一性,并且可以作为其他表与该表之间关系的依据。每个表只能有一个主键约束,主键约束的值必须是唯一的且不为空。
主键约束可以在创建表时定义,也可以在已有表上添加。
举例:
1.在创建一个名为"student"的表时,可以给"id"列定义主键约束。
主键约束
这个时候,当我们添加元素的时候,id的值就必须唯一并且不为空。
主键举例
>2.当表已经创建好,表中并没有任何一列进行主键约束,我们还可以通过下面这种方式进行主键约束。
约束
注意
这种约束方式并不如前者,而且当想要约束的列,有null或者有重复元素的时候,会主键约束失败。
失败

上面用到的代码:

mysql>createtable student(id intprimarykey, name varchar(10));
Query OK,0rows affected (0.02 sec)

mysql>desc student;+-------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+-------+-------------+------+-----+---------+-------+| id    |int(11)|NO| PRI |NULL||| name  |varchar(10)| YES  ||NULL||+-------+-------------+------+-----+---------+-------+2rowsinset(0.00 sec)

mysql>insertintovalues(null,'张三');
ERROR 1064(42000): You have an error in your SQL syntax;check the manual that corresponds to your MySQL server version for the right syntax touse near 'values(null,'张三')' at line 1
mysql>insertinto student values(null,'张三');
ERROR 1048(23000): Column'id' cannot be null
mysql>insertinto student values('张三');
ERROR 1136(21S01): Column count doesn't match value count at row 1
mysql> insert into student values(1,'张三');
Query OK, 1 row affected (0.01 sec)

mysql> insert into student values(1,'李四');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert into student values(2,'李四');
Query OK,1row affected (0.01 sec)

mysql>select*from student;+----+------+| id | name |+----+------+|1| 张三 ||2| 李四 |+----+------+2rowsinset(0.00 sec)

3.FOREIGN KEY:外键约束

概念:
外键约束是一种用于保持表之间数据一致性的约束,它建立了两个表之间的一对多关系。外键约束确保了一个表中的数据必须和另一个表中的数据相关联,否则就会触发约束错误。
外键约束也可以在创建表时定义或者在已有表上添加。
举例:
外键约束也可以在创建表时定义或者在已有表上添加。
下图定义了一个外键约束:
外键
外键约束通常用于将两个表之间建立一对多关系,上面图中,student表中的class_id列是一个外键,它关联到了class表中的id列。这个外键约束确保student表中的class_id列的值只能从class表中的id列中的值中选择,如果没有,则报错。
约束

上面用到的代码:

mysql>createtable class(id intprimarykey, name varchar(10));
Query OK,0rows affected (0.01 sec)

mysql>createtable student(id intprimarykey, name varchar(20), class_id int,->foreignkey(class_id)references class(id));
Query OK,0rows affected (0.02 sec)

mysql>desc student;+----------+-------------+------+-----+---------+-------+| Field    |Type|Null|Key|Default| Extra |+----------+-------------+------+-----+---------+-------+| id       |int(11)|NO| PRI |NULL||| name     |varchar(20)| YES  ||NULL||| class_id |int(11)| YES  | MUL |NULL||+----------+-------------+------+-----+---------+-------+3rowsinset(0.00 sec)

mysql>insertinto class values(1,'软件工程'),(2,'计科');
Query OK,2rows affected (0.01 sec)
Records: 2  Duplicates: 0Warnings: 0

mysql>insertinto student values(20211,'张三',1);
Query OK,1row affected (0.01 sec)

mysql>insertinto student values(20212,'李四',2);
Query OK,1row affected (0.01 sec)

mysql>insertinto student values(20213,'王五',3);
ERROR 1452(23000): Cannot addorupdate a child row: a foreignkeyconstraint fails (`xiaoc`.`student`,CONSTRAINT`student_ibfk_1`FOREIGNKEY(`class_id`)REFERENCES`class`(`id`))

4.NOT NULL:非空约束

概念:
非空约束是一种用于确保列中的值不为空的约束。如果为某个列定义了非空约束,那么在插入或更新数据时必须为该列提供一个非空值,否则就会触发非空约束错误。
举例:
在创建表时,可以为某个列定义非空约束。
下面的代码定义了一个名为student的表,其中的id列被定义为非空约束:
非空约束
这个时候如果插入空的元素就会报错。
非空报错

上面用到的代码:

mysql>createtable student(id intnotnull, name varchar(10));
Query OK,0rows affected (0.01 sec)

mysql>desc student;+-------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+-------+-------------+------+-----+---------+-------+| id    |int(11)|NO||NULL||| name  |varchar(10)| YES  ||NULL||+-------+-------------+------+-----+---------+-------+2rowsinset(0.01 sec)

mysql>insertinto student values(1,'张三');
Query OK,1row affected (0.01 sec)

mysql>insertinto student values(null,'李四');
ERROR 1048(23000): Column'id' cannot be null
mysql>insertinto student values('李四');

5.UNIQUE:唯一约束

概念:
唯一约束是一种用于确保某个列中的值唯一的约束。如果为某个列定义了唯一约束,那么该列中的值必须是唯一的,不允许有重复值。唯一约束可以用于确保表中某一列或多列的组合中没有重复值。
举例:
在创建表时,可以为某个列定义唯一约束。
下面的代码定义了一个名为users的表,其中的email列被定义为唯一约束:
唯一
上述例子中,student表中的id列被定义为唯一约束,因此,任何向student表插入数据的操作,都必须确保id列中的值是唯一的。
唯一报错

上面用到的代码:

mysql>createtable student(id intunique,name varchar(20));
Query OK,0rows affected (0.02 sec)

mysql>desc student;+-------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+-------+-------------+------+-----+---------+-------+| id    |int(11)| YES  | UNI |NULL||| name  |varchar(20)| YES  ||NULL||+-------+-------------+------+-----+---------+-------+2rowsinset(0.00 sec)

mysql>insertinto student values(1,'张三');
Query OK,1row affected (0.01 sec)

mysql>insertinto student values(2,'李四');
Query OK,1row affected (0.01 sec)

mysql>insertinto student values(2,'威威');
ERROR 1062(23000): Duplicate entry '2'forkey'id'

5.DEFAULT:默认值约束

概念:
默认值约束是指在向表中插入新行时,如果没有为某个列指定具体的值,则该列会使用预定义的默认值。默认值可以是任何常量或表达式,例如字符串、数字、日期等。如果某个列定义了默认值约束,则在执行INSERT操作时,如果没有为该列指定具体值,则会自动使用默认值。
举例:
在创建表时,可以为某个列指定默认值约束。例如,下面的代码创建了一个名为student的表,其中的name列被定义为默认值约束:
默认
当插入null.
默认值

上面用到的代码:

mysql>createtable student(id int, name varchar(10)default'陌路人');
Query OK,0rows affected (0.02 sec)

mysql>desc student;+-------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+-------+-------------+------+-----+---------+-------+| id    |int(11)| YES  ||NULL||| name  |varchar(10)| YES  || 陌路人  ||+-------+-------------+------+-----+---------+-------+2rowsinset(0.00 sec)

mysql>insertinto student(id)values(1),(2);
Query OK,2rows affected (0.01 sec)
Records: 2  Duplicates: 0Warnings: 0

mysql>insertinto student values(3,'张三');
Query OK,1row affected (0.01 sec)

mysql>select*from student;+------+--------+| id   | name   |+------+--------+|1| 陌路人 ||2| 陌路人 ||3| 张三   |+------+--------+3rowsinset(0.00 sec)

6.总结

数据库约束是数据库设计中的重要概念,它可以有效地保障数据的完整性、一致性、准确性和安全性,帮助开发人员更好地管理和维护数据,所以掌握约束还是非常重要的。
以上就是常用的约束,下次见!

标签: 数据库 mysql sql

本文转载自: https://blog.csdn.net/weixin_73392477/article/details/131130201
版权归原作者 是小辰 所有, 如有侵权,请联系我们删除。

“【MySQL】一文带你了解数据库约束”的评论:

还没有评论