【MySQL】一文带你了解数据库约束
【转】【MySQL】一文带你了解数据库约束【侵删】
1. 约束类型
作用:
数据库约束是用于限制数据输入或数据更新的规则。数据库约束确保在表中只能插入符合规则的数据,以确保数据的完整性和一致性。
常见的数据库约束包括:
2.PRIMARY KEY:主键约束
概念:
主键约束是一种用于限制表中唯一标识每行记录的数据库约束。主键约束可以确保表中每行的唯一性,并且可以作为其他表与该表之间关系的依据。每个表只能有一个主键约束,主键约束的值必须是唯一的且不为空。
主键约束可以在创建表时定义,也可以在已有表上添加。
举例:
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 1mysql> insert into student values(null,'张三');ERROR 1048 (23000): Column 'id' cannot be nullmysql> 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)12345678910111213141516171819202122232425262728293031323334
3.FOREIGN KEY:外键约束
概念:
外键约束是一种用于保持表之间数据一致性的约束,它建立了两个表之间的一对多关系。外键约束确保了一个表中的数据必须和另一个表中的数据相关联,否则就会触发约束错误。
外键约束也可以在创建表时定义或者在已有表上添加。
举例:
外键约束也可以在创建表时定义或者在已有表上添加。
下图定义了一个外键约束:
![]()
外键约束通常用于将两个表之间建立一对多关系,上面图中,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: 0mysql> 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`))1234567891011121314151617181920212223242526272829
4.NOT NULL:非空约束
概念:
非空约束是一种用于确保列中的值不为空的约束。如果为某个列定义了非空约束,那么在插入或更新数据时必须为该列提供一个非空值,否则就会触发非空约束错误。
举例:
在创建表时,可以为某个列定义非空约束。
下面的代码定义了一个名为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 nullmysql> insert into student values('李四');123456789101112131415161718
5.UNIQUE:唯一约束
概念:
唯一约束是一种用于确保某个列中的值唯一的约束。如果为某个列定义了唯一约束,那么该列中的值必须是唯一的,不允许有重复值。唯一约束可以用于确保表中某一列或多列的组合中没有重复值。
举例:
在创建表时,可以为某个列定义唯一约束。
下面的代码定义了一个名为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'1234567891011121314151617181920
5.DEFAULT:默认值约束
概念:
默认值约束是指在向表中插入新行时,如果没有为某个列指定具体的值,则该列会使用预定义的默认值。默认值可以是任何常量或表达式,例如字符串、数字、日期等。如果某个列定义了默认值约束,则在执行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: 0mysql> 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)12345678910111213141516171819202122232425262728
6.总结
数据库约束是数据库设计中的重要概念,它可以有效地保障数据的完整性、一致性、准确性和安全性,帮助开发人员更好地管理和维护数据,所以掌握约束还是非常重要的。
以上就是常用的约束,下次见!
猜你喜欢
- 【MySql】select * 查询慢的原因和优化方法
- ‌使用SELECT *查询语句会导致查询效率低下的原因主要包括‌:它会查询所有的列和行数据,包括不需要的和重复的列,因此会占用更多的系统资源,导致查询效率低下。此外,由于...
- 【MySql】MySQL表的内外连接和视图
- 内外连接一、表的内外连接(1)左外连接(2)右外连接1. 内连接2. 外连接3. 练习二、视图1. 视图的使用2. 视图规则和限制一、表的内外连接表的连接分为内连和外连。1. 内连接内连接实际上就是利用 where 子句对两种表形成的笛卡尔积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。语法: select 字段 from 表1 inner join 表2 on 连接条件&nbs
- 【MySQL】MySQL主从同步实现
- 要实现MySQL的主从同步,可以按照以下步骤来进行操作:1 配置主服务器确保主服务器的MySQL配置文件my.cnf或my.ini中启动了二进制日志中brinary.log,即设置了log-bin参数为ON。为主数据库创建一个用于复制的用户,并授予复制权限。例如使用以下明命令:Create USER 'repl'@'slave_ip_address' INENTIFIED BY 'password';Grant REPLACEACTION SLAV
- 【MySql】深入解析数据库索引
- 写在前面 MySQL索引是数据库中一个关键的概念,它可以极大地提高查询性能,加快数据检索速度。但是,要充分发挥索引的作用,需要深入理解它们的工作原理和使用方式。在本文中,我们将深入解析MySQL索引,探讨它们的重要性、类型、创建、维护以及最佳实践。一、基础介绍 1.1 什么是索引?在数据库中,索引是一种数据结构,用于快速查找表中的数据。索引包含表中一列或多列的值,这些值按照一定的顺序进行排序,以便优化数据的检索速度。通过使用索引,数据库可以避免全表扫描,从而提高查询
- 【MySql】批量替换数据表中某字段的值
- 系统域名变更,需要把数据库存储的图片、文件等链接域名也替换掉,使用了文字替换的方法,在此记录一下:数据库:mysqlUPDATE user SET headimg = REPLACE(headimg, 'a.com', 'b.com');其中 user 是数据表,headimg是其中的字段,把headimg中'a.com'全部替换成'b.com',headimg中
- 【MySQL】MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
- 一、视图#视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称”即可获取结果集,可以将该结果集当做表来使用。使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的SQL了,直接去视图中查找即可,但视图有明显的效率问题,并且视图是存放在数据库中的,如果我们程序中使用的SQL过分依赖数据库中的视图,即强耦合,那就意味着扩展SQL极为不便,因此并不推荐使用视图有如下的特点: &
- 【MSQL】MATCH() AGAINST()全文搜索
- 这个问题是关于MySQL的全文搜索查询。MATCH() AGAINST() 是MySQL全文搜索的一部分。问题中的代码是在查询中使用MATCH() AGAINST(),但是使用方式有一些问题。首先,MATCH() 函数的参数应该是一个字段名,而不是一个字段值。其次,AGAINST 子句后面应该是要搜索的字符串,并且这个字符串需要被单引号包围。在布尔全文搜索模式下,你需要使用一些特殊的操作符来表示搜索的重要性或条件。例如,+表示一个词必须存在,而 - 表示一个词必须不存在。SELECT
- 【MySQL】一文带你了解数据库约束
- 文章目录1. 约束类型2.PRIMARY KEY:主键约束3.FOREIGN KEY:外键约束4.NOT NULL:非空约束5.UNIQUE:唯一约束5.DEFAULT:默认值约束6.总结1. 约束类型作用: 数据库约束是用于限制数据输入或数据更新的规则。数据库约束确保在表中只能插入符合规则的数据,以确保数据的完整性和一致性。 常见的数据库约束包括:主键约束:用于唯一标识表中的每一行数据,确保数据唯一性和完整性。外键约束:用于确保表之间数据的关系