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

MySQL学习之路:数据的完整性-约束

数据的完整性 数据完整性是指数据的准确性和逻辑一致性,用来防止数据库中存在不符合语义、无效数据或错误数据等。...用Navicat图形工具创建约束 创建商品类型表category和商品goods表,category表结构如表3-10所示,goods表结构如表3-11所示。...序号 字段 数据类型 主键 允许空 说明 1 cid int 是 否 类别id 2 cname varchar(30) 否 类别名称 序号 字段 数据类型 主键 允许空 说明 1 gid...约束实现了表间的引用完整性,当主表中被引用列的值发生变化时,为了保证表间数据的一致性,从表的中与该值相关的信息也应该相应更新,这就是约束的级联更新和删除。...NO ACTION:不进行任何操作 RESTRICT:拒绝主表更新或修改的关联列。 删除约束 使用DROP TABLE语句删除表时,表中所有的约束也随之被删除。

20020

如何处理 MySQL错误码 1215:无法添加约束

本文为作者翻译文章,原文链接:Dealing with MySQL Error Code 1215: “Cannot add foreign key constraint” 在给一个表创建时,MySQL...总是会出现提示: ERROR 1215 (HY000): Cannot add foreign key constraint 这信息基本是啥都没说,下面就来说说几种常见的导致1215错误的情况: 父表不存在...解决方法: 先创建父表,再创建子表; SET FOREIGN_KEY_CHECKS=0;后,创建子表,再创建父表;SET FOREIGN_KEY_CHECKS=1;(这备份常用方式) 标点符号使用不对 错误方式...parent(id); ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent(`id`); 父表或者父表中相关列的名字写错了错误...parent_virt INT(10) NOT NULL, FOREIGN KEY (parent_virt) REFERENCES parent(column_virt) ) ENGINE INNODB; 创建失败的更多提示信息

20.8K21
您找到你想要的搜索结果了吗?
是的
没有找到

第13章_约束

它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。 为了保证数据的完整性,SQL 规范以约束的方式对表数据进行额外的条件限制。...因为被依赖 / 被参考的值必须是唯一的 (2)在创建约束时,如果不给约束命名,默认名不是列名,而是自动产生一个键名(例如 student_ibfk_1;),也可以指定约束名。...(约束失败) (`atguigudb`....不建约束,你的操作(创建表、删除表、添加、修改、删除)不受限制,要保证数据的 引用完整性 ,只能依 靠程序员的自觉 ,或者是 在Java程序中进行限定 。...MySQL 支持多种存储引擎,每一个表都可以指定一个不同的存储引擎,需要注意的是:约束是用来保证数据的参照完整性的,如果表之间需要关联,却指定了不同的存储引擎,那么这些表之间是不能创建约束

32630

MySQL学习笔记汇总(四)——表的约束、存储引擎、事务

一、表的约束 在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。...(简称PK) 约束(foreign key):…(简称FK) 检查约束(check):注意Oracle数据库有check约束,但是mysql没有,目前mysql不支持该约束。...username varchar(255) ); 约束:foreign key 主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为 字段,那么该字段的值必须来源于参照的表的主键...可以为NULL 被引用的字段不一定是主键,但至少具有unique约束。...InnoDB 优点:支持事务、行级锁、等。这种存储引擎数据的安全得到保障。

1.6K50

【MySql】表的约束

约束的最终目标:保证数据的完整性和可预期性所以需要更多的约束。...我们选择某一列作为主键,但是并不排除其他属性不需要维护,可能需要用到唯一来限定,选择其他列作为唯一,与主键配合起来,能够保证一些数据冲突。...foreign key 用于定义主表和从表之间的关系:约束主要定义在从表上,主表则必须是有主键约束或unique约束。...,上面的例子,我们不创建约束,就正常建立学生表,以及班级表,该有的字段我们都有。...因为此时两张表在业务上是有相关性的,但是在业务上没有建立约束关系,那么就可能出现问题。 解决方案就是通过完成的。

17430

MYSQL ERROR CODE 错误编号的意义

,请增大可用的数据库连接数或重启数据库 1205:加锁超时 1211:当前用户没有创建用户的权限 1216:约束检查失败,更新子表记录失败 1217:约束检查失败,删除或修改主表记录失败...错误:1239 SQLSTATE: 42000 (ER_WRONG_FK_DEF) 消息:对于 ’%s’: %s, 定义不正确。...冲突声明:’%s%s’和’%s%s’ 错误:1303 SQLSTATE: 2F003 (ER_SP_NO_RECURSIVE_CREATE) 消息:不能从另一个存储子程序中创建%s。...错误:1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2) 消息:不能删除或更新父行,约束失败(%s)。...错误:1452 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW_2) 消息:不能添加或更新子行,约束失败(%s)。

2.6K20

MySQL 学习笔记(三):完整性和触发器设计

其实这里理论上来说应该是插入失败的,因为 student 有检查约束,但不同于SQL,在MYSQL中,CHECK只是一段可调用但无意义的子句。MySQL会直接忽略。...添加约束 alter table 从表 add constraint 约束名(形如:FK_从表_主表) foreign key(属性名) references 主表(属性名) alter table...约束 + 级联(删除/更新) alter table 从表 add constraint 约束名 foreign key(属性名) references 主表(属性名)  ON DELETE CASCADE...删除约束 删除主键约束:alter table 表名 drop primary key; 删除外约束:alter table 表名 drop foreign key (区分大小写);...这里我创建的时候 sno 中有些表有主键约束,有些却没有,所以当我删除主键约束的时候它会提示错误建立起来了。但我不明白为什么建立的时候没有报错。

1.4K40

db2 terminate作用_db2 truncate table immediate

类代码 23 约束违例 表 18. 类代码 23:约束违例 SQLSTATE 值 含义23001 RESTRICT 更新或删除规则防止父被更新或删除。...23503 的插入或更新值无效。23504 NO ACTION 更新或删除规则防止父被更新或删除。23505 发生由唯一索引或唯一约束强加的约束违例。...23520 不能定义,因为其所有的值都不同于父表的父。23521 对目录表的更新违反了内部约束。23522 标识列值的范围或者序列用完。23523 已经为安全标号列提供了无效值。...类代码 40:事务回滚 SQLSTATE 值 含义40001 发生了伴随自动回滚的超时或死锁。40003 语句完整性未知。40504 由于系统错误导致工作单元被回滚。...42830 不符合父的描述。 42831 主键或唯一列不允许空值。 42832 不允许对系统对象执行该操作。 42834 不能指定 SET NULL,因为不能对外的任何列指定空值。

7.5K20

MySQL:与复制系统的相遇的挑战与应对

然而,在实际操作中,复制系统可能会遭遇约束带来的挑战。本文旨在深入探讨对MySQL复制系统的影响,并提供一些应对策略,以确保数据库的稳定运行和数据的完整性。...简介 是数据库表之间的一个重要链接,它确保了数据的引用完整性和一致性。通过,我们可以在不同的表之间建立关系,并且确保数据的完整性不会因为错误的操作而受损。...与复制的冲突 在有约束的情况下进行MySQL复制可能会遭遇一些问题。下面是两个常见的问题场景: 异步复制延迟:在异步复制中,从服务器可能会落后于主服务器。...约束检查失败:在从服务器上应用变更时,如果相关的数据尚未到位,可能会导致约束检查失败,从而使复制进程暂停。...这可能需要应用程序在逻辑层面上保证数据的完整性。 使用半同步复制:半同步复制可以确保至少有一个从服务器接收并写入了所有的事务,从而减小了复制延迟和约束错误的可能性。

18720

Mysql基础7-约束

一、约束的基本概念   1、概念:约束是作用于表中字段上的规则,用于限制储存在表中的数据   2、目的:保证数据库中的数据的正确性,有效性和完整性   3、分类 非空约束(not null):限制该字段的数据不能为...,则采用默认值 检查约束(check 8.0以后的新约束):保证字段满足某一个条件 约束(foreign key):用来让两张变的数据建立连接,保证数据的一致性和完整性 二、约束的案例实践   需求...): Duplicate entry '10002' for key 'stu_table.stu_num'   说明5:提示10002已经重复了  三、约束介绍   1、什么是 首先是表中一个字段...是约束的关键字     说明4:references 后面跟上父表和父表中字段   4、需求:给student表中的teacher_id设置为teacher表的,并且对应id字段的数据 mysql...null 五、删除外约束   1、删除外的语法 alter table 表名 drop foreign key 键名称; mysql> alter table student drop foreign

30640

【Java】已解决com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException异常

这个异常通常表明在执行数据库操作时违反了数据完整性约束,例如主键冲突约束不满足、唯一约束冲突等。这类问题往往出现在插入、更新或删除数据库记录的场景中。...二、可能出错的原因 主键冲突:尝试插入一个已经存在主键值的记录。 约束不满足:尝试插入或更新一个记录,但其外键值在相关表中不存在。...唯一约束冲突:尝试插入一个违反唯一约束的记录,如某列被定义为UNIQUE,但新插入的值已经存在。 其他完整性约束:数据库中的其他完整性规则被违反,例如CHECK约束等。...由于我们省略了主键字段(假设它是自增的),因此不会发生主键冲突。 五、注意事项 数据校验:在插入或更新数据库记录之前,始终进行必要的数据校验,以确保不违反任何完整性约束。...如果某个操作失败,可以回滚整个事务。

12210

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

(例外:一个临时表可能使用与非临时表一样的约束名称) CHECK的条件表达式必须遵守以下规则,如果包含不允许的结构,将会触发错误: 非生成列和生成列允许被添加到表达式,但包含AUTO_INCREMENT...CONNECTION_ID(),CURRENT_USER(),NOW() 存储函数和用户自定义函数不被允许 存储过程不被允许 变量:系统变量、用户自定义变量和存储过程的本地变量均不被允许使用 子查询不应许被使用 参考动作...,如:ON UPDATE, ON DELETE被禁止在包含CHECK约束的列使用,相应的,CHECK约束也被禁止在使用参考动作的列使用 CHECK约束在插入、更新、替换(REPLACE)和LOAD...DATA/XML语句的时候被评估,如果评估结果是FALSE将触发错误,如果错误发生,已经提交的数据的处理与对应存储引擎是否支持事务有关,也依赖严格SQL模式是否生效 如果约束表达式所需的数据类型与声明的列类型不一致...CHECK (ID>=1 AND PID >=0); -- remove check ALTER TABLE Departments DROP CHECK CHK_PID; 如果属于数据库逻辑,比如:审计,可以使用触发器

1.1K30

MySQL基础及原理

约束 作用:限制某个表的某个字段的引用完整性。 关键字:FOREIGN KEY 主表(父表):被引用/参考的表。 从表(子表):引用/参考别人的表。...总结:约束关系是针对双方的 添加了约束后,主表的修改和删除数据受约束。 添加了约束后,从表的添加和修改数据受约束。 在从表上建立的,要求主表必须存在。...答:MySQL支持多种存储引擎,每一个表都可以指定一个不同的存储引擎,需要注意的是:约束是用来保证数据的参照完整性的,如果表之间需要关联,却指定了不同的存储引擎,那么这些表之间是不能创建约束的...不建约束,你的操作(创建表、删除表、添加、修改、删除)不受限制,要保证数据的 引用完整性 ,只能依 靠程序员的自觉 ,或者是 在Java程序中进行限定 。...'23000' ; # 捕获sqlstate_value值,当遇到sqlstate_value值为23000时,执行EXIT操作,并且将@proc_value的值设置为-1 DECLARE EXIT

3.8K20

数据库的作用,以及和主键的区别

http://blog.csdn.net/tiantian1980/article/details/1603126 是数据库一级的一个完整性约束,就是数据库基础理论书中所说的“参照完整性”的数据库实现方式...属性当然是可以去掉的,如果你不想再用这种约束,对编程当然不会有什么影响,但相应的录入数据的时候就不对录入的数据进行“参照完整性”检查了。       ...2、使用建,简单直观,可以直接在数据模型中体现,无论是设计、维护等回有很大的好处,特别是对于分析现有的数据库的好处时非常明显的--前不久我分析了一个企业现有的数据库,里面的参照完整性约束有的是描述...4、关于方便,根据我带项目的情况来看,程序员确实有反映,主要是在调试时输入数据麻烦:如果数据可以违反参照完整性,那么就是说参照完整性本身就不对名誉业务冲突,此时也不应该用触发期货程序实现;否则,说明数据是错误的...实际上,前台程序应该对这种提交失败做出处理。数据是企业的而非程序的,储程序要尽量与数据分离,反之亦然。 最后说一下,建几个原则: 1、 为关联字段创建。 2、 所有的都必须唯一。

5.7K21

MySQL实战七:你不知道的约束使用!

2.2 2.2.1 创建 (1)不带别名的,数据库自动生成 首先创建department表: CREATE TABLE department ( dept_name varchar...,用来设置当主键表中的被参考列的数据发生变化时,表中响应字段的变换规则的。...学习 cascade 表示级联操作,就是说,如果主键表中被参考字段更新,表(子表)中也更新,主键表(父表)中的记录被删除,表(子表)中改行也相应删除。...,删除父表主键数据会将子表联同删除,删除子表数据不影响父表。...而on update只能删除子表数据,不能删除父表主键数据,只能更新父表的主键,同时父子表数据都会被更新,但是在子表的上做更新操作无效。

4.3K20
领券