首页
学习
活动
专区
圈层
工具
发布

mysql建立约束

MySQL中的约束(Constraints)是用于确保数据表中数据的完整性和准确性的规则。它们可以防止无效数据的插入、更新或删除,从而保证数据库中的数据质量。以下是MySQL中常见的约束类型及其相关概念、优势、应用场景以及可能遇到的问题和解决方案。

约束类型

  1. 主键约束(PRIMARY KEY)
    • 概念:主键是表中的一个或多个字段,其值能唯一地标识表中的每一行。
    • 优势:确保数据的唯一性和完整性。
    • 应用场景:用于标识表中的记录,如用户ID、订单号等。
    • 示例:
    • 示例:
  • 唯一约束(UNIQUE)
    • 概念:确保表中的某一列或多列的值是唯一的。
    • 优势:防止重复数据的插入。
    • 应用场景:如电子邮件地址、用户名等。
    • 示例:
    • 示例:
  • 外键约束(FOREIGN KEY)
    • 概念:用于建立两个表之间的链接,确保引用完整性。
    • 优势:维护数据的一致性和引用完整性。
    • 应用场景:如订单表中的用户ID引用用户表中的ID。
    • 示例:
    • 示例:
  • 非空约束(NOT NULL)
    • 概念:确保某一列的值不能为空。
    • 优势:防止插入空值,确保数据的完整性。
    • 应用场景:如用户名、电子邮件地址等。
    • 示例:
    • 示例:
  • 检查约束(CHECK)
    • 概念:用于限制某一列的值必须满足特定的条件。
    • 优势:确保数据的合法性。
    • 应用场景:如年龄必须在0到100之间。
    • 示例:
    • 示例:

常见问题及解决方案

  1. 约束冲突
    • 问题:插入或更新数据时,违反了约束条件。
    • 原因:数据不符合约束条件,如插入重复的主键值或违反唯一约束。
    • 解决方案:检查插入或更新的数据,确保其符合约束条件。
  • 外键约束失败
    • 问题:插入或更新数据时,外键引用的主键不存在。
    • 原因:引用的主键值在引用表中不存在。
    • 解决方案:确保引用的主键值在引用表中存在,或者在插入或更新数据前先创建相应的记录。
  • 性能问题
    • 问题:约束检查可能导致性能下降。
    • 原因:频繁的约束检查增加了数据库的负担。
    • 解决方案:优化查询和索引,减少不必要的约束检查。

参考链接

通过合理使用约束,可以有效地保证数据库中的数据质量和完整性,避免数据错误和不一致的情况。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL约束

约束 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。...非空约束 (not null 被设置非空约束的字段值不能为空) - 建表时添加非空约束: - create table student( - id int not null, - id_number...唯一约束 (unique 被设置唯一约束的字段值不能重复,但是可以为空) - 建表时添加唯一约束 - create table student( - id int, - id_number...varchar(25) unique -- 给id_number设置唯一约束 - ); 查看唯一约束:show index from 表名; 删除唯一约束:alter table 表名 drop index...字段名; 创建表之后添加唯一约束:alter table 表名 modify 字段名 数据类型 unique; 主键约束 (primary key 同时保证了唯一和非空) - 创建表时添加主键约束

2.6K20
  • MySQL约束

    约束在创建表的时候添加比较合适。 一、约束概述 1.1、什么是约束 约束用于限制加入表的数据的类型。...> insert into teacher values(null,'李小四','男',45); Column 'tid' cannot be null 去掉老师表中的主键约束 mysql> alter...| +-----+--------+---------+--------------+--------------------------+ 2 行于数据集 (0.01 秒) 创建一个学生表(与班级表建立主外键关联...格式: alter table 从表 drop foreign key 外键约束名称; 案例: 删除stu1中的外表关联 mysql> alter table stu1 drop foreign key...更新主表中的主键,从表中的外键列也自动同步更新 案例: 创建一个学生表(与班级表建立主外键关联,并加入级联操作) create table stu -- 学生表 ( sid int primary key

    8.3K10

    MySQL 约束

    外键约束 外键约束用于建立表与表之间的关系,确保引用另一个表中的值时的完整性。 外键约束经常和主键约束一起使用,用来确保数据的完整性,即保证该字段的值必须来自于主表的关联列的值。...); 创建检查约束 在 MySQL 8.0.16 之前,CREATE TABLE 仅允许以下有限版本的表 CHECK 约束语法,该语法将被解析并忽略: CHECK (expr) 从 MySQL 8.0.16...MySQL 为另一个生成一个名称。 创建默认值约束 建表时在字段后使用 DEFAULT 添加默认值可创建默认值约束。...在 MySQL 中,通常情况下,这个值通常为 def,因为 MySQL 不使用目录的概念。 CONSTRAINT_SCHEMA:这是包含约束的数据库的名称。它指定了约束所属的数据库。...5.删除约束 要删除 MySQL 表中的约束,可以使用 ALTER TABLE 语句并指定要删除的约束类型和名称。

    4.8K10

    初识MySQL · 约束

    前言: 对于约束来说,是一种限制数据的方式,这里的约束和生活中的约束是差不多的,比如数据来说,生活中的语文成绩在150以内,0分以上,如果有谁给你说我语文考了151分,那指定是扯淡,同样的,拿我们班级中的学号来举例...在MySQL中就可以通过主键或者是唯一键来约束数据不能重复,等等等等。 说白了,我们学习这里的约束和结合生活中的场景是非常容易理解的,那么话不多说,我们直接进入主题。...对于第三个约束来说,comment,老实说它算不上一个约束,它只是一个列描述,或者说是注释而已,我们在desc的表里面还看不到我们的注释,我们只能通过show create table table_name...zerofill mysql> show create table tt3\G ***************** 1. row ***************** Table: tt3 Create...对于初学MySQL的同学来说看到10肯定是蒙蔽的,我们从数据的大小,int的大小是4字节,和10也没有关系。

    1.6K00

    【MySQL】约束类型

    ,应优先为关键业务字段添加 对于可选信息(如用户的昵称、备注)不应设置非空约束 MySQL中,字符串类型的非空列如果未指定默认值,插入时必须显式提供值 2....解释: 表中某个列的值,必须是另一张表中的主键列,或是唯一约束列的值,也就是当前表中的值在另一张表中必须存在,且还要满足主键或是唯一约束 示例: 建立关联关系,那么关联关系的主外键的数据类型要与目标表中的数据类型要保持一致...null, class_id BIGINT ); -- 建立关联关系,那么关联关系的主外键的数据类型要与目标表中的数据类型要保持一致 -- 为已有表添加外键约束 ALTER TABLE student..., '女')), -- 性别只能是男女 ); 数据库兼容性: MySQL 5.7及之前版本:会解析CHECK约束但不生效(忽略检查) MySQL 8.0及以上版本:完全支持CHECK约束 PostgreSQL...查看表中的约束 通过数据库系统表可以查询表中已定义的约束: -- MySQL中查看约束 SELECT CONSTRAINT_NAME, COLUMN_NAME, CONSTRAINT_TYPE

    59010

    mysql的约束

    在mysql设计表中,有个概念叫做约束 什么是约束 约束英文:constraint 约束实际上就是表中数据的限制条件 约束种类 mysql的约束大概分为以下几种: 非空约束(not null) 唯一性约束...(unique) 主键约束(primary key) PK 外键约束(foreign key) FK 检查约束(目前MySQL不支持、Oracle支持,本文不做介绍) 为了能继续看下去,打开mysql,...(非空约束,主键约束,唯一性约束);在后面会使用到外键约束 非空约束 非空约束是我们最常见的一种约束方式,它规定了我们插入数据不允许为空(在mysql中,''不是空,null才是),例如以下插入语句:...应用场景方面,例如用户邮箱,用户密码不能为空,都可以增加非空约束 唯一性约束 唯一性约束是使用unique关键字进行的约束,它有多种约束方式以及约束形式....表:子表 创建先创建父表 删除先删除子表数据 插入先插入父表数据 外键约束将会让mysql在插入,删除,更新会增加额外的判断,严格来说,不允许使用外键约束,如果需要限制,请在代码层限制

    3.2K10

    MySQL 约束介绍

    唯一性约束允许列值为空。 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。 MySQL会给唯一约束的列上默认创建一个唯一索引。...字段名 字段类型 UNIQUE; 3、主键约束 用来唯一标识表中的一行记录 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值 一个表最多只能有一个主键约束 主键约束对应着表中的一列或者多列...如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复 当创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引 CREATE TABLE 表名称( 字段名 数据类型...字段名 数据类型; 5、外键约束 限定某个表的某个字段的引用完整性 从表的外键列,必须引用/参考主表的主键或唯一约束的列 在创建外键约束时,如果不给外键约束命名,默认名不是列名,而是自动产生一个外键名...从表”中指定外键约束,并且一个表可以建立多个外键约束 当创建外键约束时,系统默认会在所在的列上建立对应的普通索引,索引名是外键的约束名,删除外键约束后,必须手动删除对应的索引 CREATE TABLE

    3.1K41

    MySQL-约束

    概述 概念 约束是作用在表中字段的规则 目的 保证数据库中数据的正确、有效和完整性 分类 约束是作用在表中字段上的,可以再创建表/修改表的时候添加约束 约束演示 请按照一下要求完成数据表结构的创建...外键约束 概念 使用外键来建立两张表之间的连接,从而保证数据的一致性和完整型性。...举例 员工表 其中的字段 deft_id 就是外键 部门表 deft_id 建立了员工表与部门表之间的联系,并且将部门表称作父表,员工表称作子表(具有外键的表)。...要注意的是,仅仅这样只是逻辑上这两张表有关联,但是在数据库层面两张表并没有真正的建立关联,并没有保证数据的一致性和完整性。...example.com', 4), (105, 'sunqi@example.com', 5); 测试 在DataGrip软件中,字段名上带有黄色小钥匙的是主键,刚刚我们以department_id作为外键去建立了两个表之间的关联

    45310

    MySQL(条件约束)

    这里递增是不会重复利用之前的值的 这里插入了100,101后,再想在(4,100)这个区间自增插入id数值就不可以了 注:①unique可以为空,但是主键不能为空 ②如果数据库是由多个mysql...服务器构成的“集群”,此时自增主键就无法生效了 6:foreign key(外键约束) (保证一个表中的数据匹配另一个表中的数据的参照完整性) 所以引入外键约束(被约束的表叫“子表”,约束别人的表...) references class(classId)); 注:前面几个约束关键字,都是哪一列需要约束,就在该列的后面加上约束条件,而foreign key是在列定义完成之后,加在最后最后面。...约束是相互的:在删除“父表”中的数据的时候,如果子表中有数据受该父表此数据的约束的话,是删不掉的,要确保子表中没有数据引用父表的记录,才能删除父表上的该数据 关于外键约束还有一个应用场景 应用场景:现在订单表中把商品...1给买走了,那么商品表中要把1号商品给删除掉,但是子表订单表还必须得保存着,怎么办(在引入外键约束的情况下,如何删除商品表中的数据,但是不影响订单表)

    3.4K10

    表的约束(MySQL)

    表的约束 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。...,主表则必须是有主键约束或unique 约束。...理论上,上面的例子,我们不创建外键约束,就正常建立学生表,以及班级表,该有的字段我们都有。 此时,在实际使用的时候,可能会出现什么问题?...因为此时两张表在业务上是有相关性的,但是在业务上没有建立约束关系,那么就可能出现问题。 解决方案就是通过外键完成的。...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql 表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

    94510

    MySQL约束详接

    为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。 从以下四个方面考虑: 什么是约束 约束是表级的强制规定。...唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。 唯一性约束允许列值为空。在创建唯一约束的时候, 如果不给唯一约束命名,就默认和列名相同。...MySQL会给唯一约束的列上默认创建一个唯一索引。 添加唯一约束 举例:    删除唯一约束 添加唯一性约束的列上也会自动创建唯一索引。 删除唯一约束只能通过删除唯一索引的方式删除。... 建表后 alter table 表名称 modify 字段名 数据类型 auto_increment;  MySQL 8.0将自增主键的计数器持久化到重做日志中。...总结:约束关系是针对双方的添加了外键约束后,主表的修改和删除数据受约束添加了外键约束后,从表的添加和修改数据受约束在从表上建立外键,要求主表必须存在删除主表时,要求从表从表先删除,或将从表中外键引用该主表的关系先删除

    2.8K10

    Mysql外键约束

    外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。...外键主要用来保证数据的完整性和一致性 两个表必须是InnoDB表,MyISAM表暂时不支持外键 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立...如果父表试图UPDATE或者DELETE任何子表中存在或匹配的外键值,最终动作取决于外键约束定义中的ON UPDATE和ON DELETE选项。...外键约束使用最多的两种情况: 1)父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败; 2)父表更新时子表也更新,父表删除时子表匹配的项也删除。...`article`, CONSTRAINT `fk_1` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`)) (4)更改更新删除约束

    9.8K81

    MySql基础之约束

    1)PRIMARY KEY 主键(非空且唯一)约束   2)FOREIGN KEY 外键约束   1)CHECK 检查约束   2)DEFAULT 默认值约束 注意: MySQL不支持...在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。 MySQL会给唯一约束的列上默认创建一个唯一索引。...MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。 当创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引(能够根据主键查询的,就根据主键查询,效率更高)。...6、外键约束 作用及特点 关键字:FOREIGN KEY 从表的外键列,必须引用/参考主表的主键或唯一约束的列 当创建外键约束时,系统默认会在所在的列上建立对应的普通索引。...检查某个字段的值是否符号xx要求,一般指的是值的范围 关键字:check MySQL5.7 可以使用check约束,但不起作用,MySQL 8.0支持 举例: create table employee

    1.8K10

    【MYSQL】表的约束

    前言 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。...五、主键 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。...而我们设计员工工号的时候,需要一种约束:而所有的员工工号都不能重复。 具体指的是在公司的业务上不能重复,我们设计表的时候,需要这个约束,那么就可以将员工工号设计成为唯一键。...,主表则必须是有主键约束或unique约束。...因此诞生了外键来约束。

    2.6K40
    领券