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

mysql增加一个约束

基础概念

MySQL中的约束(Constraint)是用来确保数据的完整性和一致性的规则。约束可以应用于表中的列或整个表。常见的约束类型包括:

  • 主键约束(PRIMARY KEY):确保列中的值唯一且非空。
  • 唯一约束(UNIQUE):确保列中的值唯一,但可以为空。
  • 外键约束(FOREIGN KEY):确保列中的值在另一个表中存在。
  • 非空约束(NOT NULL):确保列中的值不为空。
  • 检查约束(CHECK):确保列中的值满足特定条件。

增加约束的类型和应用场景

1. 主键约束

应用场景:用于标识表中的每一行数据,通常用于主键列。

示例

代码语言:txt
复制
ALTER TABLE users ADD PRIMARY KEY (user_id);

2. 唯一约束

应用场景:用于确保某列的值唯一,例如用户名、电子邮件等。

示例

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

3. 外键约束

应用场景:用于建立两个表之间的关系,确保数据的引用完整性。

示例

代码语言:txt
复制
ALTER TABLE orders ADD FOREIGN KEY (user_id) REFERENCES users(user_id);

4. 非空约束

应用场景:用于确保某列的值不为空。

示例

代码语言:txt
复制
ALTER TABLE users ADD NOT NULL (username);

5. 检查约束

应用场景:用于确保某列的值满足特定条件。

示例

代码语言:txt
复制
ALTER TABLE users ADD CHECK (age >= 18);

可能遇到的问题及解决方法

1. 约束冲突

问题描述:尝试添加约束时,可能会因为现有数据不符合约束条件而失败。

解决方法

  • 先删除不符合约束条件的数据。
  • 修改现有数据使其符合约束条件。
  • 或者暂时禁用约束,添加数据后再重新启用。

示例

代码语言:txt
复制
-- 禁用外键检查
SET FOREIGN_KEY_CHECKS = 0;

-- 添加数据

-- 重新启用外键检查
SET FOREIGN_KEY_CHECKS = 1;

2. 约束重复

问题描述:尝试添加已经存在的约束。

解决方法

  • 先删除已存在的约束,再重新添加。

示例

代码语言:txt
复制
ALTER TABLE users DROP INDEX email;
ALTER TABLE users ADD UNIQUE (email);

参考链接

通过以上信息,你应该能够了解如何在MySQL中增加不同类型的约束,以及可能遇到的问题和解决方法。

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

相关·内容

  • MySQL约束

    约束是按照约定(特定)条件限制,管束等意思。约束的作用是添加、删除。 在数据库中对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。...1.2、约束作用 对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。...自增长只能用在主键上 非空与唯一约束可以设置在N个字段上 六、默认值 默认值就是:当我们在增加记录的时候如果不去设置值,那么自动的会用默认值补齐,字段默认的默认值是null 6.1、默认值格式 字段名...7.3、为什么要使用外键约束 新的问题? 假如我们在员工表中增加一条记录 员工表中的记录dep_id中的3,在部门表中并没有这个id的记录。我们也将这条记录加入了进去。...解决方法: 使用外键约束 7.4、什么是外键约束 一张表的一个字段受限于另外一张表的一个字段对应的值。这里涉及到两张表:被引用的表叫主表(父表),另外一张叫从表(子表)。

    8.2K10

    MySQL 约束

    如果省略,MySQL 会根据表名、_chk_ 和序数 (1, 2, 3, …) 生成一个名称。约束名称的最大长度为 64 个字符。 它们区分大小写,但不区分重音符号。...CHECK (c1 c2) 是表约束:它出现在任何列定义之外,因此它可以(并且确实)引用多个表列。 此约束包含对尚未定义的列的前向引用。没有指定约束名称,因此 MySQL 生成一个名称。...接下来的三个约束是列约束:每个约束都出现在列定义中,因此只能引用正在定义的列。 其中一项约束是明确命名的。 MySQL 为另外两个分别生成一个名称。 最后两个约束是表约束。 其中之一已被明确命名。...MySQL 为另一个生成一个名称。 创建默认值约束 建表时在字段后使用 DEFAULT 添加默认值可创建默认值约束。...在 MySQL 中,通常情况下,这个值通常为 def,因为 MySQL 不使用目录的概念。 CONSTRAINT_SCHEMA:这是包含约束的数据库的名称。它指定了约束所属的数据库。

    4.4K10

    MySQL约束

    约束 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。...非空约束 (not null 被设置非空约束的字段值不能为空) - 建表时添加非空约束: - create table student( - id int not null, - id_number...字段名; 创建表之后添加唯一约束:alter table 表名 modify 字段名 数据类型 unique; 主键约束 (primary key 同时保证了唯一和非空) - 创建表时添加主键约束...表名 drop primary key; 添加主键约束:alter table 表名 modify 字段名 数据类型 primary key; 自动增长 (auto_increment) 一个表中有且只能有一个自增长列...table 表名 add [constraint 外键名称] foreign key (外键字段名称) references 关联的主表名(字段名); * 注:外键名称可以不指定,如果不指定系统会给分配一个

    2.6K20

    MySQL 约束

    核心目标: 学习如何使用约束来强制执行 MySQL 表中数据的完整性和规则,确保数据的准确性、一致性和可靠性。 什么是约束? 约束是在表的数据列上强制执行的规则。...UNIQUE (唯一约束) 作用:保证列(或列组合)中的所有值都是唯一的。允许存在一个 NULL 值(除非该列也被定义为 NOT NULL)。...PRIMARY KEY (主键约束) 作用:唯一标识表中的每一行。它隐含了 NOT NULL 和 UNIQUE 约束。一个表只能有一个主键(可以是单列或多列组合)。...当插入新行时,如果未指定该列的值,MySQL 会自动为其生成一个比当前最大值大 1 的唯一序列号。...请为 emp_email 列(VARCHAR(100))添加一个唯一约束,约束名为 uq_emp_email。

    62710

    初识MySQL · 约束

    在MySQL中就可以通过主键或者是唯一键来约束数据不能重复,等等等等。 说白了,我们学习这里的约束和结合生活中的场景是非常容易理解的,那么话不多说,我们直接进入主题。...null default comment 对于第一个约束来说,null,也就是我们在C语言学习的空属性,它代表了一个数据是否能为空,就像这样: create table if not exists test_null...对于第三个约束来说,comment,老实说它算不上一个约束,它只是一个列描述,或者说是注释而已,我们在desc的表里面还看不到我们的注释,我们只能通过show create table table_name...create table if not exists test_unique( id int unique, age int primary key ); 通过desc我们可以看到唯一键的unique的Key也增加了...int primary key, name varchar(30) not null comment'班级名' ); 首先我们创建一个主表,然后创建一个从表,在从表里指定外键约束: create

    1.4K00

    【MySQL】约束类型

    ,应优先为关键业务字段添加 对于可选信息(如用户的昵称、备注)不应设置非空约束 MySQL中,字符串类型的非空列如果未指定默认值,插入时必须显式提供值 2....,列被标示为了一个PRI,表示它是一个主键 我们可以看到写入数据之后的两种约束同时生效 主键约束帮我们校验了非空和唯一,这两个校验在写入数据的时候对效率是有一定影响的,但是比起不做校验来说,这个性能消耗还是可以承担的...NULL RESTRICT:禁止操作(默认行为) NO ACTION:不做处理(多数数据库等同于RESTRICT) 外键使用争议: 尽管外键能保证数据参照完整性,但在高并发系统中常被禁用,原因包括: 外键约束会增加数据库的性能开销..., '女')), -- 性别只能是男女 ); 数据库兼容性: MySQL 5.7及之前版本:会解析CHECK约束但不生效(忽略检查) MySQL 8.0及以上版本:完全支持CHECK约束 PostgreSQL...约束的性能影响 约束虽然保障了数据完整性,但也会带来一定的性能开销: 插入/更新性能:每次写入数据都需要验证约束,会增加操作耗时(尤其是外键和检查约束) 存储开销:唯一约束和主键约束会创建索引,占用额外存储空间

    45010

    MySQL 约束介绍

    用来限制某个字段/某列的值不能重复 同一个表可以有多个唯一约束 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。...唯一性约束允许列值为空。 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。 MySQL会给唯一约束的列上默认创建一个唯一索引。...字段名 字段类型 UNIQUE; 3、主键约束 用来唯一标识表中的一行记录 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值 一个表最多只能有一个主键约束 主键约束对应着表中的一列或者多列...,是复合主键 ALTER TABLE 表名称 ADD PRIMARY KEY(字段名1,字段名2); 4、自增长约束 某个字段的值自增 一个表最多只能有一个自增长列 当需要产生唯一标识符或顺序值时,可设置自增长...默认值 , 字段名 数据类型 UNIQUE KEY AUTO_INCREMENT, 字段名 数据类型 NOT NULL DEFAULT 默认值, PRIMARY KEY(字段名) ); -- 增加自增约束

    3K41

    MySQL(条件约束)

    前引:为了校验数据,让数据的正确性能够得到保证,约束,能够引进更多的检查操作,但是也会增加系统的成本开销 1:not null 指示某列不能存储null 应用①create table student(...name varchar(20)); 当前id不需要自己去指定(也可以自己指定),数据库会按照自增的方式(自增数据必须是整形)来分配 每次使用null的方式插入数据时,都会在这一列最大值的基础上继续往后增加...这里递增是不会重复利用之前的值的 这里插入了100,101后,再想在(4,100)这个区间自增插入id数值就不可以了 注:①unique可以为空,但是主键不能为空 ②如果数据库是由多个mysql...服务器构成的“集群”,此时自增主键就无法生效了 6:foreign key(外键约束) (保证一个表中的数据匹配另一个表中的数据的参照完整性) 所以引入外键约束(被约束的表叫“子表”,约束别人的表...约束是相互的:在删除“父表”中的数据的时候,如果子表中有数据受该父表此数据的约束的话,是删不掉的,要确保子表中没有数据引用父表的记录,才能删除父表上的该数据 关于外键约束还有一个应用场景 应用场景:现在订单表中把商品

    3K10

    MySQL-约束

    概述 概念 约束是作用在表中字段的规则 目的 保证数据库中数据的正确、有效和完整性 分类 约束是作用在表中字段上的,可以再创建表/修改表的时候添加约束 约束演示 请按照一下要求完成数据表结构的创建...INSERT INTO yonghu (name, age, status, gender) value ('小昭', 132, '1', '女'); 系统依然报错: 存在check约束函数 当然约束函数在一些软件中实现了可视化操作...,下面以GataGrip为例: 在创建表时,可以使用图形化界面添加字段,并且点击相应的选项实现约束函数。...外键约束 概念 使用外键来建立两张表之间的连接,从而保证数据的一致性和完整型性。...此时如果要删除部门表中的数据时: 它会提示,你无法删除一个父表中的内容 删除外键 ALTER TABLE employees DROP CONSTRAINT link; 即可将外键删除: 不能发现,department_id

    36710

    mysql的约束

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

    3.1K10

    MySQL约束详接

    UNIQUE 特点  同一个表可以有多个唯一约束。...唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。 唯一性约束允许列值为空。在创建唯一约束的时候, 如果不给唯一约束命名,就默认和列名相同。...MySQL会给唯一约束的列上默认创建一个唯一索引。 添加唯一约束 举例:    删除唯一约束 添加唯一性约束的列上也会自动创建唯一索引。 删除唯一约束只能通过删除唯一索引的方式删除。...关键字 primary key 特点  添加主键约束 建表时指定主键约束  建表后增加主键约束 ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表); #字段列表可以是一个字段... 建表后 alter table 表名称 modify 字段名 数据类型 auto_increment;  MySQL 8.0将自增主键的计数器持久化到重做日志中。

    2.7K10

    表的约束(MySQL)

    表的约束 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。...1.5 主键 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个 主键;主键所在的列通常是整数类型。...自增长的特点: 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值) 自增长字段必须是整数 一张表最多只能有一个自增长 案例: mysql> create table tt21(   ->...1.7 唯一键 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以 解决表中有多个字段需要唯一性约束的问题。...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql 表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

    77610

    MySQL外键约束

    什么是外检约束 外键其实很好理解,简单的说就是两张表建立一个连接关系。这里我们那主表A和副表B举例,我A表中有用户信息,B表中有用户订单信息。...要是数据完整对应起来,肯定是需要把两张表关联起来,我们因此会在B表中村一个A表的字段,常见的我们存的是A表的主键ID外键。 外检约束要求 .MySQL的数据表存储引擎必须为Innodb。...外键约束的作用 保证数据的完整性和一致性. 创建语法 [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...)...实战演示 // 主表 mysql> create table userInfo( -> id int(4) not null primary key auto_increment, ->...> delete from userInfo where id=2; Query OK, 1 row affected (0.01 sec) mysql> select * from userInfo

    9.5K20

    Mysql外键约束

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

    9.6K81
    领券