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

mysql添加check约束

MySQL中的CHECK约束是一种用于限制表中数据的条件约束。它允许你定义一个条件,只有当插入或更新的数据满足这个条件时,操作才会成功。如果不满足,操作将被拒绝并返回错误。

基础概念

CHECK约束通过在创建表时或之后使用ALTER TABLE语句来定义。它通常用于确保数据的完整性,比如限制某个字段的值必须在特定范围内。

相关优势

  1. 数据完整性:CHECK约束确保只有符合特定条件的数据才能被插入或更新到表中。
  2. 减少错误:通过限制数据的输入,可以减少由于非法数据导致的错误。
  3. 简化应用逻辑:一些数据验证逻辑可以在数据库层面实现,从而减轻应用层的负担。

类型

MySQL中的CHECK约束主要是列级约束,即它应用于单个列。不过,也可以通过复合条件来约束多个列。

应用场景

假设你有一个users表,其中有一个age字段,你希望用户的年龄必须在18到100岁之间。你可以这样定义CHECK约束:

代码语言:txt
复制
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT CHECK (age BETWEEN 18 AND 100)
);

或者,如果你已经创建了表,也可以使用ALTER TABLE来添加CHECK约束:

代码语言:txt
复制
ALTER TABLE users
ADD CONSTRAINT chk_age CHECK (age BETWEEN 18 AND 100);

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

  1. CHECK约束被忽略:在MySQL中,默认情况下,CHECK约束并不会强制执行。要启用它,你需要设置innodb_strict_modeON。这可以通过修改MySQL配置文件或在会话级别动态设置来实现。
  2. CHECK约束被忽略:在MySQL中,默认情况下,CHECK约束并不会强制执行。要启用它,你需要设置innodb_strict_modeON。这可以通过修改MySQL配置文件或在会话级别动态设置来实现。
  3. 或者在MySQL配置文件(如my.cnfmy.ini)中添加:
  4. 或者在MySQL配置文件(如my.cnfmy.ini)中添加:
  5. 修改后,记得重启MySQL服务。
  6. CHECK约束条件不满足:如果插入或更新的数据不满足CHECK约束定义的条件,MySQL将返回一个错误。你需要检查并修正数据,确保它们符合约束条件。
  7. 性能考虑:虽然CHECK约束有助于维护数据完整性,但在某些情况下,它们可能会影响数据库性能。因此,在设计数据库和定义约束时,需要权衡数据完整性和性能之间的关系。

参考链接

希望这些信息能帮助你更好地理解和使用MySQL中的CHECK约束!

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

相关·内容

  • MySQL 8.0有趣的新特性:CHECK约束

    1.功能说明 2.建议使用CHECK约束的场景 1.功能说明 在MySQL 8.0.16以前, CREATE TABLE允许从语法层面输入下列CHECK约束,但实际没有效果: CHECK (expr)...在 MySQL 8.0.16,CREATE TABLE添加了针对所有存储引擎的表和列的CHECK约束的核心特性。...,MySQL会自动生成一个类似:{table_name}_check_{seq_num}的约束名称,约束名称是大小写敏感的,且最长可以到64个字符 expr设定了一个返回值为boolean类型的约束条件..._0900_ai_ci SQL规范要求:所有约束(包括:PRIMARY KEY, UNIQUE,FOREIGN KEY, CHECK)属于同一个命名空间(NAMESPACE),在MySQL实现中,所有的约束类型在每个...(例外:一个临时表可能使用与非临时表一样的约束名称) CHECK的条件表达式必须遵守以下规则,如果包含不允许的结构,将会触发错误: 非生成列和生成列允许被添加到表达式,但包含AUTO_INCREMENT

    1.9K30

    数据库 SQL 约束之 CHECK

    约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。 SQL CHECK 约束 CHECK 约束用于限制列中的值的范围。...如果对单个列定义 CHECK 约束,那么该列只允许特定的值。 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。...一)CREATE TABLE 时的 SQL CHECK 约束 1、定义单个列的 CHECK 约束 实例 CREATE TABLE student ( IID int NOT NULL, name varchar...CHECK 约束 1、当表已被创建,定义单个列的 CHECK 约束 实例 ALTER TABLE student ADD CHECK(ID); 2、当表已被创建,定义多个列的 CHECK 约束 实例...TABLE student DROP CHECK chk_Person; 至此,数据库 SQL CHECK(检查) 约束就讲完啦,下一篇讲《数据库 SQL DEFAULT(默认) 约束》。

    1.1K20

    MySQL 约束

    1.1 非空(not null) 1.1.1 概述   非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,用户在添加数据时没有指定值,数据库系统就会报错。...,若添加唯一约束前含有相同数据则必须先处理数据后才能添加 alter table tb_name modify col_name col_type unique; # 删除唯一约束 alter table...- Duplicate entry '1' for key 'id' 1.3 主键(primary key) 1.3.1 概述   主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL...modify col_name col_type primary key; # 删除主键约束 alter table tb_name drop primary key; 1.3.3 示例 mysql...一个表中只能有一个字段使用 AUTO_INCREMENT 约束,且该字段必须有唯一索引,以避免序号重复(即自动增长只能给 primary key 或者 unique 添加,一张表中只能添加一个)。

    4.2K31

    MySQL约束

    约束是按照约定(特定)条件限制,管束等意思。约束的作用是添加、删除。 在数据库中对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。...约束在创建表的时候添加比较合适。 一、约束概述 1.1、什么是约束 约束用于限制加入表的数据的类型。...1.2、约束作用 对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。...10.2、检查约束使用 10.2.1、行级添加 格式: create table 表名 ( check (字段名1 !.... 10.2.3、表后添加 格式: alter table 数据库表名 add constraint 检查约束名 check(检查约束); 案例: 创建一个表t6 create table t6 (

    8.2K10

    MySQL约束

    非空约束 (not null 被设置非空约束的字段值不能为空) - 建表时添加非空约束: - create table student( - id int not null, - id_number...唯一约束 (unique 被设置唯一约束的字段值不能重复,但是可以为空) - 建表时添加唯一约束 - create table student( - id int, - id_number...字段名; 创建表之后添加唯一约束:alter table 表名 modify 字段名 数据类型 unique; 主键约束 (primary key 同时保证了唯一和非空) - 创建表时添加主键约束...- create table student( - id int primary key, -- 给id添加主键约束 - name varchar(20), - ); 删除主键约束:alter table...外键约束 (foreign key , 让多个表之间关联,从而保证数据的正确性) - 创建表时添加外键约束: - 删除键外键约束:alter table 表名 drop foreign key 外键名称

    2.6K20

    初识MySQL · 约束

    前言: 对于约束来说,是一种限制数据的方式,这里的约束和生活中的约束是差不多的,比如数据来说,生活中的语文成绩在150以内,0分以上,如果有谁给你说我语文考了151分,那指定是扯淡,同样的,拿我们班级中的学号来举例...在MySQL中就可以通过主键或者是唯一键来约束数据不能重复,等等等等。 说白了,我们学习这里的约束和结合生活中的场景是非常容易理解的,那么话不多说,我们直接进入主题。...或者我们忘记添加主键了,我们应该如何添加呢?...(0.11 sec) Records: 0 Duplicates: 0 Warnings: 0 添加同理: mysql> alter table test_pri_3 add primary key...所以我们根据班级的属性创建一个表,并且在添加学生表信息的时候,根据id我们可以确定该学生是哪个班级的,那么我们就将该学生的属性和班级表联系在了一起: create table myclass ( id

    1.4K00

    【MySQL】约束类型

    ,应优先为关键业务字段添加 对于可选信息(如用户的昵称、备注)不应设置非空约束 MySQL中,字符串类型的非空列如果未指定默认值,插入时必须显式提供值 2....创建方式: -- 建表时添加检查约束 CREATE TABLE test ( id INT , gender VARCHAR(1) , CHECK (gender IN ('男'..., '女')), -- 性别只能是男女 ); 数据库兼容性: MySQL 5.7及之前版本:会解析CHECK约束但不生效(忽略检查) MySQL 8.0及以上版本:完全支持CHECK约束 PostgreSQL...、Oracle、SQL Server:完全支持CHECK约束 使用建议: 由于MySQL的版本兼容性问题,重要的检查逻辑建议同时在应用层实现 检查条件应保持简单,复杂逻辑更适合在业务代码中处理 对于格式验证...版本兼容性处理 MySQL 5.7中用枚举(ENUM)替代CHECK约束: CREATE TABLE student ( gender ENUM('男', '女') NOT NULL -- 等效于

    44810

    【约束布局】使用 Design 模式编辑 ConstraintLayout 约束布局 ( 添加 Guideline 引导线 | 添加 FragmentContainerView )

    文章目录 一、使用 Design 模式编辑 ConstraintLayout 约束布局 1、添加 Guideline 引导线 2、添加 Fragment1 3、添加 Fragment2 一、使用 Design...模式编辑 ConstraintLayout 约束布局 ---- 向约束布局 ConstraintLayout 中添加两个 Fragment , 垂直方向各占 50 % , 一个在屏幕上半部分 , 一个占据屏幕下半部分...; 1、添加 Guideline 引导线 向 约束布局 中添加一条 Guideline 引导线 , 点击 布局中的 Guidelines 按钮 , 在弹出的 下拉菜单中 , 选择 Horizontal...Fragment1 要想向 约束布局 中添加 Fragment , 首先要创建 Fragment 的类 , 这里创建两个 Fragment 类 : Fragment1 : package kim.hsl.livedatademo...Fragment2 再次拖动 FragmentContainerView 拖动到界面下半部分 , 这次选择插入 Fragment2 组件 , 为其添加布局 , 并填充满父容器 ;

    1.9K10

    MySQL 约束介绍

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

    3K41

    MySQL(条件约束)

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

    3K10

    MySQL-约束

    概述 概念 约束是作用在表中字段的规则 目的 保证数据库中数据的正确、有效和完整性 分类 约束是作用在表中字段上的,可以再创建表/修改表的时候添加约束 约束演示 请按照一下要求完成数据表结构的创建...primary key auto_increment comment '主键', name varchar(10) not null unique comment '姓名', age int check...INSERT INTO yonghu (name, age, status, gender) value ('小昭', 132, '1', '女'); 系统依然报错: 存在check约束函数 当然约束函数在一些软件中实现了可视化操作...,下面以GataGrip为例: 在创建表时,可以使用图形化界面添加字段,并且点击相应的选项实现约束函数。...语法 添加外键 FOREIGN KEY (department_id) REFERENCES departments(department_id) 这句话是在,表结构创建时使用。

    36710
    领券