发布于2023-06-20 21:28 阅读(1686) 评论(0) 点赞(9) 收藏(4)
作用:
数据库约束是用于限制数据输入或数据更新的规则。数据库约束确保在表中只能插入符合规则的数据,以确保数据的完整性和一致性。
常见的数据库约束包括:
概念:
主键约束是一种用于限制表中唯一标识每行记录的数据库约束。主键约束可以确保表中每行的唯一性,并且可以作为其他表与该表之间关系的依据。每个表只能有一个主键约束,主键约束的值必须是唯一的且不为空。
主键约束可以在创建表时定义,也可以在已有表上添加。
举例:
1.在创建一个名为"student"的表时,可以给"id"列定义主键约束。
这个时候,当我们添加元素的时候,id的值就必须唯一并且不为空。
>2.当表已经创建好,表中并没有任何一列进行主键约束,我们还可以通过下面这种方式进行主键约束。
注意
这种约束方式并不如前者,而且当想要约束的列,有null或者有重复元素的时候,会主键约束失败。
上面用到的代码:
mysql> create table student(id int primary key, name varchar(10)); Query OK, 0 rows affected (0.02 sec) mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> insert into values(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 to use near 'values(null,'张三')' at line 1 mysql> insert into student values(null,'张三'); ERROR 1048 (23000): Column 'id' cannot be null mysql> insert into 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, 1 row affected (0.01 sec) mysql> select * from student; +----+------+ | id | name | +----+------+ | 1 | 张三 | | 2 | 李四 | +----+------+ 2 rows in set (0.00 sec)
概念:
外键约束是一种用于保持表之间数据一致性的约束,它建立了两个表之间的一对多关系。外键约束确保了一个表中的数据必须和另一个表中的数据相关联,否则就会触发约束错误。
外键约束也可以在创建表时定义或者在已有表上添加。
举例:
外键约束也可以在创建表时定义或者在已有表上添加。
下图定义了一个外键约束:
外键约束通常用于将两个表之间建立一对多关系,上面图中,student表中的class_id列是一个外键,它关联到了class表中的id列。这个外键约束确保student表中的class_id列的值只能从class表中的id列中的值中选择,如果没有,则报错。
上面用到的代码:
mysql> create table class(id int primary key, name varchar(10)); Query OK, 0 rows affected (0.01 sec) mysql> create table student(id int primary key, name varchar(20), class_id int, -> foreign key (class_id) references class(id)); Query OK, 0 rows 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 | | +----------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) mysql> insert into class values(1, '软件工程'),(2, '计科'); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> insert into student values(20211,'张三',1); Query OK, 1 row affected (0.01 sec) mysql> insert into student values(20212,'李四',2); Query OK, 1 row affected (0.01 sec) mysql> insert into student values(20213,'王五',3); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`xiaoc`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`))
概念:
非空约束是一种用于确保列中的值不为空的约束。如果为某个列定义了非空约束,那么在插入或更新数据时必须为该列提供一个非空值,否则就会触发非空约束错误。
举例:
在创建表时,可以为某个列定义非空约束。
下面的代码定义了一个名为student的表,其中的id列被定义为非空约束:
这个时候如果插入空的元素就会报错。
上面用到的代码:
mysql> create table student(id int not null, name varchar(10)); Query OK, 0 rows affected (0.01 sec) mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | name | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.01 sec) mysql> insert into student values(1,'张三'); Query OK, 1 row affected (0.01 sec) mysql> insert into student values(null,'李四'); ERROR 1048 (23000): Column 'id' cannot be null mysql> insert into student values('李四');
概念:
唯一约束是一种用于确保某个列中的值唯一的约束。如果为某个列定义了唯一约束,那么该列中的值必须是唯一的,不允许有重复值。唯一约束可以用于确保表中某一列或多列的组合中没有重复值。
举例:
在创建表时,可以为某个列定义唯一约束。
下面的代码定义了一个名为users的表,其中的email列被定义为唯一约束:
上述例子中,student表中的id列被定义为唯一约束,因此,任何向student表插入数据的操作,都必须确保id列中的值是唯一的。
上面用到的代码:
mysql> create table student(id int unique,name varchar(20)); Query OK, 0 rows affected (0.02 sec) mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | UNI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> insert into student values(1,'张三'); Query OK, 1 row affected (0.01 sec) mysql> insert into student values(2,'李四'); Query OK, 1 row affected (0.01 sec) mysql> insert into student values(2,'威威'); ERROR 1062 (23000): Duplicate entry '2' for key 'id'
概念:
默认值约束是指在向表中插入新行时,如果没有为某个列指定具体的值,则该列会使用预定义的默认值。默认值可以是任何常量或表达式,例如字符串、数字、日期等。如果某个列定义了默认值约束,则在执行INSERT操作时,如果没有为该列指定具体值,则会自动使用默认值。
举例:
在创建表时,可以为某个列指定默认值约束。例如,下面的代码创建了一个名为student的表,其中的name列被定义为默认值约束:
当插入null.
上面用到的代码:
mysql> create table student(id int, name varchar(10) default '陌路人'); Query OK, 0 rows affected (0.02 sec) mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(10) | YES | | 陌路人 | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> insert into student(id) values(1),(2); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> insert into student values(3,'张三'); Query OK, 1 row affected (0.01 sec) mysql> select * from student; +------+--------+ | id | name | +------+--------+ | 1 | 陌路人 | | 2 | 陌路人 | | 3 | 张三 | +------+--------+ 3 rows in set (0.00 sec)
数据库约束是数据库设计中的重要概念,它可以有效地保障数据的完整性、一致性、准确性和安全性,帮助开发人员更好地管理和维护数据,所以掌握约束还是非常重要的。
以上就是常用的约束,下次见!
作者:我叫你一声你敢答应吗
链接:http://www.phpheidong.com/blog/article/546634/8cd1f9f2939512bb2c79/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!