首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql中的检查约束

基础概念

MySQL中的检查约束(Check Constraint)是一种数据完整性约束,用于限制表中某一列或多列的值必须满足特定的条件。检查约束确保插入或更新的数据符合预定义的规则,从而维护数据的准确性和一致性。

相关优势

  1. 数据完整性:通过检查约束,可以确保表中的数据符合特定的业务规则,避免不符合要求的数据被插入或更新。
  2. 减少错误:在数据库层面进行数据验证,可以减少应用程序层面的错误处理逻辑,简化开发工作。
  3. 提高性能:相比于在应用程序中进行数据验证,数据库层面的检查约束通常具有更高的执行效率。

类型

MySQL中的检查约束主要分为以下几类:

  1. 单列检查约束:针对单个列进行约束,限制该列的值必须满足特定条件。
  2. 多列检查约束:针对多个列进行联合约束,限制这些列的组合值必须满足特定条件。

应用场景

检查约束广泛应用于各种需要确保数据完整性的场景,例如:

  1. 年龄限制:在用户表中,可以设置检查约束确保年龄字段的值在合理范围内(如0-120)。
  2. 邮箱格式验证:在用户表中,可以设置检查约束确保邮箱字段的值符合邮箱格式要求。
  3. 状态机:在状态表中,可以设置检查约束确保状态字段的值在预定义的状态集合内。

常见问题及解决方法

问题1:如何创建检查约束?

解决方法

代码语言:txt
复制
CREATE TABLE users (
    id INT PRIMARY KEY,
    age INT CHECK (age >= 0 AND age <= 120),
    email VARCHAR(255) CHECK (email LIKE '%_@__%.__%')
);

上述示例中,创建了一个users表,并为ageemail字段分别添加了检查约束。

问题2:如何修改已存在的检查约束?

解决方法

代码语言:txt
复制
ALTER TABLE users
ADD CONSTRAINT chk_age CHECK (age >= 0 AND age <= 120);

上述示例中,通过ALTER TABLE语句为已存在的users表添加了一个新的检查约束。

问题3:如何删除检查约束?

解决方法

代码语言:txt
复制
ALTER TABLE users
DROP CONSTRAINT chk_age;

上述示例中,通过ALTER TABLE语句删除了users表中的chk_age检查约束。

参考链接

MySQL官方文档 - 检查约束

请注意,MySQL在某些版本中对检查约束的支持可能有限。在实际应用中,建议根据具体需求和数据库版本选择合适的数据完整性约束方式。

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

相关·内容

技术译文 | MySQL 8 检查约束使用

-8/ ---- 大家好,在这篇小文章,我们将介绍 MySQL 8 一项新功能。...什么是“检查约束”? 这是一项新功能,用于指定在插入或更新到一行之前检查条件。...如果表任何行搜索条件结果为 FALSE,则约束可能返回错误(但如果结果为 UNKNOWN 或 TRUE,则约束不会返回错误)。...此功能开始在 MySQL 8.0.16 上运行,在以前版本,我们可以创建它,但它不起作用,这意味着支持语法,但不起作用。...要牢记使用规则: AUTO_INCREMENT 自增列不允许使用 引用另一个表另一列不允许使用 存储函数和用户定义函数不允许使用 存储过程和函数参数不允许使用 子查询不允许使用 在外键中用于后续操作

1.1K20

MySQL 8.0新特性 — 检查约束

前言 在MySQL 8.0版本,引入了一个非常有用新特性 — 检查约束,它可以提高对非法或不合理数据写入控制能力;接下来我们就来详细了解一下。...检查约束 创建、删除与查看 (1)可以在建表时,创建检查约束 mysql> CREATE TABLE t1 -> ( -> CHECK (c1 c2), ->...,check_constraints查询检查约束具体定义 mysql> SELECT * FROM information_schema.table_constraints WHERE table_name...限制 (1)自增列和其他表列,不支持检查约束 (2)不确定函数,如CONNECTION_ID(),CURRENT_USER(),NOW()等,不支持检查约束 (3)用户自定义函数,不支持检查约束...(4)存储过程,不支持检查约束 (5)变量,不支持检查约束 (6)子查询,不支持检查约束 总结 检查约束,还是一个非常不错功能,可以实现丰富数据校验场景,大家可以尝试一下。

1.4K120
  • 检查约束与默认值约束

    检查约束 检查约束(CHECK Constraint)是一种用于限制列中允许约束。使用检查约束可以确保列值满足一定条件。在MySQL检查约束是使用CHECK关键字来创建。...是要添加检查约束表名,constraint_name是要添加约束名称,condition是列中允许条件。...一旦检查约束被创建,它将确保在插入、更新或删除数据时不会破坏列条件。...在MySQL,默认值约束是使用DEFAULT关键字来创建。 创建默认值约束 要创建默认值约束,请使用ALTER TABLE语句,并在表中使用ADD CONSTRAINT子句。...示例 下面是一个示例,演示如何在MySQL中使用检查约束和默认值约束。我们将创建一个employees表,包含id、name、age和salary列。

    1.1K20

    MySQL约束和存储引擎

    约束(Constraint) 在创建表时候,可以给表字段添加相应约束,添加约束目的是为了保证表数据合法性、有效性、完整性。 常见约束有哪些呢?...主键约束(primary key):约束字段不能重复 外键约束(foreign key):简称FK 检查约束(check) :注意oracle数据库有check约束,但是mysql没有,目前mysql...int primary key, username varchar(255), email varchar(255) ) ; 根据以上测试得出:id是主键,因为添加了主键约束,主键约束数据不能为...MySql默认使用存储引擎是InnoDB方式。默认采用字符集是UTF8。 什么是存储引擎呢? 存储引擎这名字只有在mysql存在。(oracle中有相应机制,但是不叫做存储引擎。...Oracle没有特殊名字,就是”表存储方式”) Mysql支持很多存储引擎,每一个存储引擎都对应了一种不同存储方式。 每一个存储引擎都有自己优缺点,需要在合适时机选择合适存储引擎。

    2K10

    mysql约束

    mysql设计表,有个概念叫做约束 什么是约束 约束英文:constraint 约束实际上就是表数据限制条件 约束种类 mysql约束大概分为以下几种: 非空约束(not null) 唯一性约束...(unique) 主键约束(primary key) PK 外键约束(foreign key) FK 检查约束(目前MySQL不支持、Oracle支持,本文不做介绍) 为了能继续看下去,打开mysql,...(非空约束,主键约束,唯一性约束);在后面会使用到外键约束 非空约束 非空约束是我们最常见一种约束方式,它规定了我们插入数据不允许为空(在mysql,''不是空,null才是),例如以下插入语句:...主键约束 关于主键约束某个字段添加主键约束后,该字段为主键字段,主键字段中出现每一个数据都称为主键值. 表每一行都应该有可以唯一标识自己一列(或一组列)。...,这里就不多做介绍了 外键约束 若有两个表A、B,id是A主键,而B也有id字段,则id就是表B外键,外键约束主要用来维护两个表之间数据一致性。

    2.1K10

    MySQL 约束

    在表某个列定义后加上关键字 NOT NULL 作为限定词,来约束该列取值不能为空。...唯一约束在一个表可有多个,并且设置唯一约束列允许有空值,但是只能有一个空值。...'1' for key 'id' 1.3 主键(primary key) 1.3.1 概述   主键(PRIMARY KEY)完整称呼是“主键约束”,是 MySQL 中使用最为频繁约束。...对于两个具有关联关系表而言,相关联字段主键所在表就是主表(父表),外键所在表就是从表(子表)。外键用来建立主表与从表关联关系,为两个表数据建立连接,约束两个表数据一致性和完整性。...在表插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。默认值约束通常用在已经设置了非空约束列,这样能够防止数据表在录入数据时出现错误。

    3K31

    MySQL 约束

    检查约束 检查约束允许你定义满足特定条件值范围或规则,用于检查字段值是否有效。 例如,学生信息表年龄字段是没有负数,并且数值也是有限制。如果是小学生,年龄不低于 6 岁才可入学。...); 创建检查约束MySQL 8.0.16 之前,CREATE TABLE 仅允许以下有限版本表 CHECK 约束语法,该语法将被解析并忽略: CHECK (expr) 从 MySQL 8.0.16...在 MySQL ,通常情况下,这个值通常为 def,因为 MySQL 不使用目录概念。 CONSTRAINT_SCHEMA:这是包含约束数据库名称。它指定了约束所属数据库。...5.删除约束 要删除 MySQL约束,可以使用 ALTER TABLE 语句并指定要删除约束类型和名称。...(referenced_column); 修改检查约束: 修改检查约束通常需要删除原来检查约束,然后添加新检查约束

    21510

    MySQL约束

    约束是按照约定(特定)条件限制,管束等意思。约束作用是添加、删除。 在数据库对表数据进行限制,保证数据正确性、有效性和完整性。一个表如果添加了约束,不正确数据将无法插入到表。...1.2、约束作用 对表数据进行限制,保证数据正确性、有效性和完整性。一个表如果添加了约束,不正确数据将无法插入到表约束在创建表时候添加比较合适。...7.3、为什么要使用外键约束问题? 假如我们在员工表增加一条记录 员工表记录dep_id3,在部门表并没有这个id记录。我们也将这条记录加入了进去。...10.1、什么是检查约束 检查约束指定某列值必须满足布尔表达式,根据用户自己需求来进行限制。...表检查约束t6_check_phone mysql> alter table t6 drop check t6_check_phone; Query OK, 0 rows affected (0.02

    6.6K10

    MySQL约束

    约束 约束是一种限制,它通过对表行或列数据做出限制,来确保表数据完整性、唯一性。...非空约束 (not null 被设置非空约束字段值不能为空) - 建表时添加非空约束: - create table student( - id int not null, - id_number...varchar(25) - ); - 删除表非空约束 * alter table student modify name varchar(20); 默认值:default 设置默认值,即使没有插入值也会有默认值...唯一约束 (unique 被设置唯一约束字段值不能重复,但是可以为空) - 建表时添加唯一约束 - create table student( - id int, - id_number...外键约束 (foreign key , 让多个表之间关联,从而保证数据正确性) - 创建表时添加外键约束: - 删除键外键约束:alter table 表名 drop foreign key 外键名称

    1.6K20

    MySql】表约束

    表中一定要有各种约束,通过约束,让我们未来插入数据库表数据是符合预期约束本质是通过技术收到逼迫程序员插入正确数据,反过来,站在mysql视角,凡是插入进来数据,都是符合数据约束。...要注意是,这只是最后显示结果,在MySQL实际存储还是2....主键 primary key 主键:primary key用来唯一约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个。但是并不意味着一个表主键,只能添加给一列。..., 0 rows affected (0.03 sec) 主键约束:主键对应字段不能重复,一旦重复,操作失败 mysql> insert into test_key values (1,'张飞')...建立外键本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入。

    20930

    MySQL约束

    所谓约束,就是避免犯一些低级错误,比如类似于语法错误,编译器编译失败实际上也算是一种约束。 表中一定要有各种约束,通过约束,让我们未来插入数据库表数据是符合预期。...约束本质: 通过技术手段倒逼程序员插入正确数据。反过来站在mysql视角,凡是插入进来数据,都是符合数据约束约束最终目标: 保证数据完整性和可预期性。 为什么数据库这么严格?...通过desc操作,其后四列就属于约束条件: 总结一下:约束就是表结构设计者在其他人插入数据之前,预先把规则定好,再让被别人按照他规则进行数据增删查改,不满足约束数据不会被插入到对应,这样下来...二.表非空约束 1.NULL与’ '比较 在MySQL数据类型已经说过,这二者是不同,NULL代表什么都没有,而' '代表一个空串。 在select语句中,NULL不会参与到相应计算操作。...只有在student不存在id=1学生,才能删除。 这就叫做外键约束。外键本质就是产生关联,增加约束,保证表和表之间完整性。

    21950

    MySQL】表约束

    约束约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表数据是符合预期约束本质是通过技术手段,倒逼用户,插入正确数据。...反过来,在 mysql 角度,凡是插入进来数据,都是符合数据约束约束最终目的就是保证数据完整性和可预期性。因此我们需要更多约束条件!...值由原来 1 变成 00001,这就是 zerofill 属性作用,如果宽度小于设定宽度(这里设置是 5),自动填充 0;要注意是,这只是最后显示结果,在 MySQL 实际存储还是1...假设我们现在来了一位新学生,它隶属于 class_id 为 30 班级: 但是我们知道,在 class 表却没有 class_id 为 30 班级,但是这位学生却进入了 stu 表,所以没有约束关系可能会导致我们错误地插入了一个不存在班级学生...建立外键本质其实就是把相关性交给 mysql 去审核了,提前告诉 mysql 表之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql 不允许你插入。

    14710

    MYSQL】表约束

    前言 真正约束字段是数据类型,但是数据类型约束很单一,需要有一些额外约束,更好保证数据合法性,从业务逻辑角度保证数据正确性。比如有一个字段是email,要求是唯一。...索引: 在关系数据库,索引是一种单独、物理对数据库表中一列或多列值进行排序一种存储结 构,它是某个表中一列或若干列值集合和相应指向表物理标识这些值数据页逻辑指针清单。...索引作用相当于图书目录,可以根据目录页码快速找到所需内容。 索引提供指向存储在表指定列数据值指针,然后根据您指定排序顺序对这些指针排序。...这样可以使对应于表SQL语句执行得更快,可快速访问数据库表特定信息 七、唯一键 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束问题...;插入学生班级号不能在班级表没有。

    24540

    【重学 MySQL】六十七、解锁检查约束,守护数据完整性

    【重学 MySQL】六十七、解锁检查约束,守护数据完整性 在MySQL检查约束(CHECK)是一种用于确保表数据满足特定条件约束。...检查约束基本概念 检查约束用于限制表值,以确保它们满足特定条件。这些条件通常通过SQL表达式来定义,当插入或更新数据时,MySQL会验证这些表达式是否为真。...,从users表删除了名为chk_age检查约束。...维护数据一致性:例如,确保两个相关字段之间值满足特定关系(如一个字段值必须大于另一个字段值)。 注意事项 MySQL版本:检查约束MySQL 8.0.16及更高版本才得到全面支持。...在之前版本,虽然可以添加检查约束,但MySQL不会对其进行验证。 复杂表达式:检查约束可以使用简单表达式,也可以包含复杂逻辑和子查询。

    13410

    oracle--约束(主键、非空、检查

    问题1:学号重复了,数据还可以插入成功 使用主键约束:学号是唯一标识一条数据,所以必须唯一且不能为空 ---(1)、在确定为主键字段后添加 primary key关键字...使用非空约束 ---(1)、创建表时候在字段后面添加not null ---(2)、在创建表字段后使用 constraints ck_表名_字段名 check(...使用检查约束 ---(1)、创建表时候在字段后使用 default 值 check(条件), ---------但是会允许空值出现,并且默认值只有在字段不声明情况下生效...---(3)、在创建表后使用:alter table 表名 add constraints ck_表名_字段名 check(条件) 问题4:年龄可以超过200 --使用检查约束条件...ch_student_sname check(sname is not null);   alter table student drop constraint ch_student_sname 检查约束

    2K10
    领券