返回顶部
首页 > 资讯 > 数据库 >【MySQL】一文带你了解数据库约束
  • 572
分享到

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

数据库mysqlsql 2023-08-17 17:08:00 572人浏览 独家记忆
摘要

文章目录 1. 约束类型2.PRIMARY KEY:主键约束3.FOREIGN KEY:外键约束4.NOT NULL:非空约束5.UNIQUE:唯一约束5.DEFAULT:默认值约束6.总结 1. 约束类型 作用: 数据

1. 约束类型

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

  1. 主键约束:用于唯一标识表中的每一行数据,确保数据唯一性和完整性。

  2. 外键约束:用于确保表之间数据的关系正确性,保证引用表中的数据必须存在于被引用的表中。

  3. 非空约束:用于确保列中的值不为空。

  4. 唯一约束:用于确保列中的值不重复。

  5. 默认约束:用于设置默认值,当插入数据时如果未提供该值,则数据库将使用默认值。

  6. 检查约束:用于确保列中的值符合特定的条件或表达式。

  7. 触发器约束:用于在特定情况下自动执行操作,如插入或删除数据时执行某项操作。

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 1mysql> 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)

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`))

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('李四');

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'

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)

6.总结

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

来源地址:https://blog.csdn.net/weixin_73392477/article/details/131130201

您可能感兴趣的文档:

--结束END--

本文标题: 【MySQL】一文带你了解数据库约束

本文链接: https://lsjlt.com/news/373177.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【MySQL】一文带你了解数据库约束
    文章目录 1. 约束类型2.PRIMARY KEY:主键约束3.FOREIGN KEY:外键约束4.NOT NULL:非空约束5.UNIQUE:唯一约束5.DEFAULT:默认值约束6.总结 1. 约束类型 作用: 数据...
    99+
    2023-08-17
    数据库 mysql sql
  • 一文带你了解MySQL之约束
    在SQL标准中,一共规定了6种不同的约束,包括非空约束,唯一约束和检查约束等,而在MySQL中是不支持检查约束的,所以这篇文章先对其余5种约束做一个详解和练习。 文章目录 1. 约束的概念2. 约束的分类3. 非空约束4. 唯一...
    99+
    2023-08-17
    mysql 数据库 sql
  • 【MySQL数据库】一约束
    🍁博客主页:👉@不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉MySQL数据库专栏 ✨欢迎加...
    99+
    2023-09-28
    数据库 mysql java
  • 一文带你吃透数据库的约束,不做CRUD程序员
    在SQL标准中,一共规定了6种不同的约束,包括非空约束,唯一约束和检查约束等,而在MySQL中是不支持检查约束的,所以这篇文章先对其余5种约束做一个详解和练习。 文章目录 1. 约束的概念 2. 约束的分类 3. 非空约束...
    99+
    2023-08-22
    数据库 mysql java
  • 一篇文章带你了解MySQL数据库基础
    目录1. 数据库概念1.1 数据库是干嘛的?1.2 数据库和数据结构是啥关系?1. 数据库是一个软件/程序1.3 两种类型的数据库2. MySQL数据库2.1 MySQL数据...
    99+
    2024-04-02
  • MySQL数据库约束详解
    目录基本介绍1.primary key(主键)细节说明2.not null(非空)3.unique(唯一)unique细节4.foreign key(外键)foreign key(外键)语法外键细节说明5.checkch...
    99+
    2024-04-02
  • 【MySQL】一文带你了解过滤数据
    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! ...
    99+
    2023-09-27
    mysql 数据库 sql
  • 【MySQL】一文带你了解检索数据
    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! ...
    99+
    2023-09-20
    mysql sql 数据库
  • 【MySQL】一文带你了解数据过滤
    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍...
    99+
    2023-08-17
    mysql 数据库 sql
  • MySQL数据库表约束讲解
    目录mysql数据库表约束一、主键约束二、外键约束三、非空约束四、唯一约束五、默认约束六、自增约束数据库建表的约束条件常用约束条件及简单介绍MySQL数据库表约束 为了防止往数据表中插入错误的数据,在MySQL中,定义了...
    99+
    2022-06-20
    MySQL数据库 数据库表约束 MySQL表约束
  • MySQL数据库的约束
    文章目录 一、约束是什么?二、约束的具体操作Not NULLUNIQUE约束的组合使用PRIMARY KEYDEFAULTFOREIGN KEY 一、约束是什么? 约束就是,在创建表的时候,对表设置一些规则,只有满足这些规...
    99+
    2023-08-30
    数据库 mysql sql
  • 【MySQL】数据库的约束
    MySQL 数据库的约束 文章目录 MySQL 数据库的约束01 数据库的约束1.1 约束类型1.1.1 NOT NULL1.1.2 UNIQUE1.1.3 DEFAULT1.1.4 PRIM...
    99+
    2023-09-12
    数据库 mysql adb
  • 一文理解MySQL数据库的约束与表的设计
    目录1.数据库约束1.1 约束类型1.2 null 约束1.3 unique 唯一的约束1.4 default 默认值约束1.5 primary key 主键约束1.6 primary key auto_incremen...
    99+
    2024-04-02
  • 【MySQL】一文带你了解SQL
    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! ...
    99+
    2023-09-06
    mysql sql 数据库
  • 一篇文章带你了解java数据库连接
    目录一、下载安装mysql二、引入驱动包三、示例1、引驱动包2、建表3、添加数据4、代码连接结果:总结一、下载安装mysql 下载地址:https://dev.mysql.com/d...
    99+
    2024-04-02
  • 一文了解MYSQL三大范式和表约束
    目录 一,什么是范式 二,三大范式的理解1,第一范式(确保每列保持原子性)2,第二范式(保证每列都和主键相关)3,第三范式(保证每列和主键直接相关,不能间接相关)4,表的关系(1)一...
    99+
    2024-04-02
  • MySQL数据库表中的约束详解
    目录mysql表中的约束(constraint)约束分类非空约束唯一性约束复合约束主键约束自增列-AUTO_INCREMENT外键约束FOREIGN KEY约束CHECK约束DEFAULT约束MySQL表中的约束(con...
    99+
    2023-03-02
    MySQL表中的约束 MySQL数据库约束 MySQL约束的使用
  • MySQL数据库的约束限制详解
    目录一、介绍二、操作添加删除外键联级操作一、介绍 数据库的约束是对表中数据进行的一种限制,为了保证数据的正确性、有效性、完整性。 无论是在添加数据还是在删除数据的时候,都能提供帮助。...
    99+
    2022-11-13
    MySQL数据库 MySQL约束
  • 带你了解MySQL数据库小技巧
    37 个 MySQL 数据库小技巧!如何快速掌握MySQL培养兴趣兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地提高学习效率。当然学习MySQL 5.6也不例外。夯实基础计算机领域的技术非常强调基础,刚开始学习可能还认识不到这一点,随...
    99+
    2023-06-02
  • 一文带你了解MySQL之锁
    目录 一、解决并发事务带来问题的两种基本方式1.1 一致性读(Consistent Reads)1.2 锁定读(Locking Reads)1.2.1 共享锁和独占锁1.2.2 锁定读的语句 1.3 写操作 二、多粒度锁三...
    99+
    2023-08-16
    mysql 数据库 大数据 数据库架构 数据库开发
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作