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

mysql 表添加约束

基础概念

MySQL中的表约束(Constraints)是用来限制表中数据的规则,确保数据的完整性和一致性。约束可以应用于单个列或多个列,主要有以下几种类型:

  1. 主键约束(PRIMARY KEY):确保表中每一行都有唯一的标识符。
  2. 唯一约束(UNIQUE):确保列中的数据唯一,但允许NULL值。
  3. 外键约束(FOREIGN KEY):用于建立两个表之间的关系,确保引用完整性。
  4. 非空约束(NOT NULL):确保列中的数据不能为空。
  5. 检查约束(CHECK):确保列中的数据满足特定的条件(MySQL不支持此约束)。

相关优势

  • 数据完整性:通过约束确保数据的准确性和一致性。
  • 引用完整性:通过外键约束确保两个表之间的关系正确无误。
  • 查询优化:约束可以帮助数据库引擎优化查询性能。

类型

  1. 主键约束
  2. 主键约束
  3. 唯一约束
  4. 唯一约束
  5. 外键约束
  6. 外键约束
  7. 非空约束
  8. 非空约束

应用场景

  • 用户注册系统:使用唯一约束确保每个用户的邮箱或用户名唯一。
  • 订单管理系统:使用外键约束确保订单与客户之间的关系正确。
  • 库存管理系统:使用非空约束确保关键字段不为空。

常见问题及解决方法

问题1:如何添加约束?

解决方法

代码语言:txt
复制
ALTER TABLE table_name
ADD CONSTRAINT constraint_name constraint_definition;

例如,添加唯一约束:

代码语言:txt
复制
ALTER TABLE students
ADD CONSTRAINT unique_email UNIQUE (email);

问题2:如何删除约束?

解决方法

代码语言:txt
复制
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

例如,删除唯一约束:

代码语言:txt
复制
ALTER TABLE students
DROP CONSTRAINT unique_email;

问题3:为什么外键约束会失败?

原因: 外键约束失败通常是因为引用的数据不存在或数据类型不匹配。

解决方法

  1. 确保引用的数据存在。
  2. 确保数据类型匹配。
  3. 检查级联操作设置是否正确。

参考链接

通过以上信息,你应该能够全面了解MySQL表约束的基础概念、优势、类型、应用场景以及常见问题的解决方法。

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

相关·内容

表的约束(MySQL)

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

77510

【MySQL】表的约束

; # 主键唯一不用指明具体column; 当主键加上auto_increment约束后,如果欲删除主键,仅仅alter table tb2 drop primary key;不行,需要先去自增约束,再...alter table tb2 drop primary key; 复合主键:有多个字段共同作为主键 唯一键(unique) 一张表中有往往有多个字段需要唯一性,数据不能重复,但是一张表中只能有一个主键...:唯一键就可以解决表中有多个字段需要唯一性约束的问题。...外键(foreign key (字段名) references 主表(列)) 外键用于定义主表和从表之间的关系: 外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。...举例:班级表id只有10,20;向从表插入时的class_id的值只能为10 / 20 / null; 数据一致性:当对主表中的主键数据进行修改(如更新或删除)时 ,通过设置外键约束的 ON DELETE

37810
  • 【MySql】表的约束

    表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束的本质是通过技术收到逼迫程序员插入正确的数据,反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。...主键 primary key 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个。但是并不意味着一个表中的主键,只能添加给一列。...一个主键可以被添加到一列,或者多列上 主键;主键所在的列通常是整数类型 创建表的时候直接在字段上指定主键 mysql> create table if not exists test_key (...外键foreign key 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

    3.4K30

    【MySQL】表的约束

    反过来,在 mysql 角度,凡是插入进来的数据,都是符合数据约束的!约束的最终目的就是保证数据的完整性和可预期性。因此我们需要更多的约束条件!...) 再为上表添加主键: 注意,一张表中最多只有一个主键,不意味着一个表的主键,只能添加给一列!...所以以上两张表现在只有关联关系,却没有约束关系,是有问题的!外键就很好地解决了这个问题,外键就是为这两张表建立外键约束。 那么我们要为哪个表添加外键约束呢?...我们知道,一个学生一定是隶属于某一个班级的,所以 stu 应该是从表,我们要为从表添加外键约束!主表则是 class. 所以我们需要重新创建一个 stu 表,为 stu 表添加外键约束。...建立外键的本质其实就是把相关性交给 mysql 去审核了,提前告诉 mysql 表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql 不允许你插入。

    2.5K10

    【MYSQL】表的约束

    前言 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。...五、主键 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。...这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息 七、唯一键 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题...而我们设计员工工号的时候,需要一种约束:而所有的员工工号都不能重复。 具体指的是在公司的业务上不能重复,我们设计表的时候,需要这个约束,那么就可以将员工工号设计成为唯一键。...:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。

    2.3K40

    MySQL:表的约束

    表的约束和约束的目标 表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库中的数据是符合预期的。约束本质是通过技术手段,倒逼程序员,插入正确的数据。...反过来,站在MySQL角度,凡是插入进来的数据,都是符合数据约束的! 约束的最终目标:保证数据的完整性和可预期性。 二....6.2 去掉主键 如果想去掉主键: 6.3 建表后添加主键 上面描述的是建表时就在相应数据类型后面表明主键,我们还可以在建表之后再添加主键。...并且建表之后添加主键需要保证在表中需要设置主键的那列元素不能冲突。...外键 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

    2.5K10

    MySQL表的约束

    约束的本质: 通过技术手段倒逼程序员插入正确的数据。反过来站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。 约束的最终目标: 保证数据的完整性和可预期性。 为什么数据库这么严格?...二.表的非空约束 1.NULL与’ '比较 在MySQL数据类型已经说过,这二者是不同的,NULL代表什么都没有,而' '代表一个空串。 在select语句中,NULL不会参与到相应的计算操作中。...删除主键约束 这样,插入的数据就可以重复,但是通过观察,仍不能为空,因为not null在创建表时的添加约束期间会一并添加到约束。不过有了主键,才能更好的查找数据,因为其具有唯一性。...已经建好的表对指定字段添加primary key约束 需要注意的是,添加primary key的字段,里面已经插入的数据不能存在重复值,否则就会违背主键的概念,导致约束添加失败。...因此,为了避免这种情况,最好在创建表时一并添加主键约束。 2.复合主键 回到上述定义,一张表中最多只能有一个主键,但这并不意味着一个表中的主键只能添加到一列。

    2.8K50

    MySQL单表&约束&事务

    违反约束的不正确数据,将无法插入到表中 常见的约束 约束名 约束关键字 主键 primary key 唯一 unique 非空 not null 外键 foreign key 主键约束 特点:不可重复...ALTER TABLE emp2 DROP PRIMARY KEY; --主键的自增 # 主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值 -- 创建主键自增的表...,对自增没有影响,使用truncate 是将整个表删除掉,然后创建一个新的表 自增的主键,重新从 1开始 非空约束 非空约束的特点: 某一列不予许为空 # 非空约束 CREATE TABLE emp2...( eid INT PRIMARY KEY AUTO_INCREMENT, -- 添加非空约束, ename字段不能为空 ename VARCHAR(20) NOT NULL, sex CHAR(1)...ename VARCHAR(20) UNIQUE, sex CHAR(1) ); 主键约束与唯一约束的区别: 主键约束 唯一且不能够为空 唯一约束,唯一 但是可以为空 一个表中只能有一个主键 , 但是可以有多个唯一约束

    2.2K30

    MySQL之表的约束

    一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性 主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN...not null - 不可空 null - 可空 默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值...---+ | egon | 18 | male | play,music | +------+-----+------+------------+ 三 unique ============设置唯一约束...nginx'); ERROR 1062 (23000): Duplicate entry '172.16.45.10-3306' for key 'PRIMARY' 五 auto_increment 约束字段为自动增长...,被约束的字段必须同时被key约束 #不指定id,则自动增长 create table student( id int primary key auto_increment, name varchar(

    5.5K60

    【MySQL篇】表的约束

    前言: 在MySQL中,表的约束用于强制保证数据的完整性和一致性。...在数据库表中,真正约束字段的是数据类型,数据类型传送门:CSDN https://mp.csdn.net/mp_blog/creation/editor/145947883但是数据类型的约束很单一,所以需要一些额外的约束...,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。...)); 插入数据 (可以插入空值) 8,外键 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有有主键约束或unique约束。...示例: 创建班级表和学生表,学生表中有外键约束 mysql> create table class( -> id int primary key, -> name varchar(

    34010

    【MySQL】表的约束(上)

    表的约束 什么是表的约束 表的约束(Constraints)是数据库表中的规则,用于限制存储的数据,保证数据的完整性、一致性和准确性。...我们先默认创建一张表: 可以看见,当我们不指定约束条件的时候,创建表时默认会给Null约束条件添加上Yes,表示这里可以插入null。我们来试试。...zerofill属性添加之后有什么影响: 可以看见,添加了zerofill属性的列前面多出了很多个0,这是为什么呢,我们加上前面的0,一共有10为数,所以这个10,就是位数,当我们插入一个数的时候...总结 在本文中,我们深入探讨了 MySQL 中几个常用的表约束,包括 NULL 约束、DEFAULT 约束、COMMENT 约束、主键约束以及 ZEROFILL 约束。...希望通过本文的介绍,大家对 MySQL 的表约束有了更深入的理解,并能够在实际项目中灵活应用。

    1.6K00

    【MySQL】008-表的约束

    : -- 删除name的非空约束 ALTER TABLE stu MODIFY NAME VARCHAR(20); 3、创建表完成之后添加约束,本质上也是更改表的字段: -- 创建表之后,添加name的非空约束...NAME VARCHAR(20); 3、创建表之后,添加唯一约束,本质是修改对应字段 -- 创建表之后,添加name的非空约束 ALTER TABLE stu MODIFY NAME VARCHAR(20...) NOT NULL; 四、主键约束 1、注意 ①含义:非空且唯一; ②一张表只能有一个主键; 2、创建表时添加主键约束 CREATE TABLE stu( id INT PRIMARY KEY,...-- 主键约束 NAME VARCHAR(20) ); 3、删除主键约束和创建表之后添加主键约束与非空约束和唯一约束一样 五、主键约束——自动增长 1、概念 如果某一列是数值类型的,使用auto_increment...) ); 注意:添加语句时主键的内容填入NULL即可,会根据上一个主键的值进行自动增加 3、删除自动增长和创建表后自动增长,同非空约束和唯一约束; 六、外键约束 1、描述 个人理解:加入一个部门的员工表

    64310

    【MySQL】005.MySQL表的约束(上)

    表的约束 1. 约束概念 真正约束字段的是数据类型,但数据类型约束很单一,需要一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。...表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。就好比我们在vs上编译代码时,vs会对我们进行各种约束,保证我们的代码在语法上是正确的。...约束本质是通过技术手段倒逼程序员插入正确的数据。反过来,站在mysql的视角,插入进来的数据,都是符合数据约束的。 约束的最终目标:保证数据的完整性和可预期性。 2....如果我们在建表时没有设置默认值,mysql会对我们的表进行优化。...主键 6.1 基本概念 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键(不意味着一个表中的主键只能添加一列,一个主键可以被添加到一列或者多列中

    53910

    修改数据表之添加主键约束

    table_name add primary key (id); alter table 表名 add primary key (字段名); 2.一个表创建之后, 需要对这个表中的一个字段设置为唯一约束...: alter table table_name add unique (id); alter table 表名 add unique (字段名); 3.一个表创建之后, 需要对这个表中的一个字段设置为外键约束...key (外键字段名) references 外键约束表名 (外键约束字段名); 例如:把test2中pid字段设置为外键,外键约束是test1的id字段 alter table test2 add...foreign key (pid) references test1 (id); 4.添加默认约束 一个表创建之后,需要对一个字段设置为默认值; alter table table_name alter...test2 alter password2 set default 123456; 5.删除默认约束 一个表创建之后,需要把设置为默认值的字段取消设置默认值; alter table table_name

    1.8K110

    MySQL数据库表约束详解

    1.表的约束的概念 表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束本质是通过技术手段,倒逼程序员,插入正确的数据。...反过来,站在MySQL的视角,凡是插进来的数据,都是符合数据约束的! 约束的最终目标:保证数据的完整性和可预期性! 下面来介绍一些主流的约束。...对a列添加了zerofill属性,再进行查找,返回如下结果: mysql> select * from tt3; +-------+------+ | a | b | +-------+-----...所以我们需要在从表上建立外键约束将主表的班级的和从表的班级进行一个外键的约束,这样保证我们每次插入和删除数据都是正确的!...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入 语法: foreign key (字段名)

    1.6K00

    MYSQL数据库-表的约束

    零、前言 本章主要讲解学习MYSQl数据库中的表的约束 表的约束 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性...这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息 7、唯一键 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题...示例: 8、外键 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。...,不创建外键约束,就正常建立学生表,以及班级表,该有的字段我们都有,在实际使用的时候,可能会出现有没有可能插入的学生信息中有具体的班级,但是该班级却没有在班级表中,这很明显是有问题的 因为此时两张表在业务上是有相关性的...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入

    9.6K30

    MySQL数据库表的约束

    表的约束:表中一定要有各种约束,通过约束让我们未来插入数据库表中的数据是否合法的预期。本质通过技术手段倒逼程序员插入正确的数据。而站在MySQL视角,插入进来是数据一定是合法的。...为什么要约束:数据库是维护数据的最后一道防线,必须保证数据的完整性和可预期性。 1.null属性 在建表过程中,我们为数据类型添加时可以指定null或not null属性。...只能有一个主键不意味着一个表中的主键只能添加给一列。可以设给多列,称为复合主键。 现在只有id和course_id同时和历史数据重复时才不被允许插入。...外键约束的是表和表之间的关系。...比如两个表:一个称为主表,一个称为从表。外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

    37410

    mysql创建数据表及约束

    在MySQL中,表是存储数据的基本单位,每张表有若干列,每一行代表一条数据记录。在MySQL中,数据是按行存储的。...创建数据表的基本语法如下 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name( 列名1 数据类型 [约束条件] [默认值], 列名2 数据类型 [约束条件...] [默认值], ............. ) [表的约束条件]; 使用主键约束 主键由表的一列或者多列组合而成。...主键约束要求主键列数据唯一,且不能为空。主键可以标识表的唯一一条记录。表的主键相当于表的目录。为表创建主键后,使用主键列作为查询条件可以大大加快表的查询速度。...create table user_tmp4(id int, name varchar(20) not null); 使用默认约束 默认约束的作用是为某列指定默认值,在向表中插入数据时,如果不指定该列的值

    5.2K40
    领券