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

MySQL 外码约束原理:如何解决数据库添加数据产生的外码(约束

文章目录 前言 一、插入新数据时报错约束? 二、对于出错 SQL 语句的分析 三、对于外码约束的分析 四、如何处理约束?...总结 ---- 前言 我们使用 MySQL 数据库添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?...我们 Course 表插入课程号为 1 的数据提示违反了约束,插入命令如下: insert into course(cno,cname,cpno,ccredit) values('1','数据库...三、对于外码约束的分析 我们根据数据库定义的参照完整性规则得知: cpno 的取值不为空的情况下(如上 cpno=‘5’),与其对应的主键 cno 参照表必须存在。...---- 总结 本文我们掌握了 MySQL 数据库如何在设计不合理遇到的外码约束的问题,并通过经典案例为大家分析了为何会出现这样的问题,同时顺着思路来设计业务的解决方案。

3K20

MySQL 数据库添加数据为什么会产生外码(约束?原理就是什么?如何解决?

文章目录 前言 一、插入新数据时报错约束? 二、对于出错 SQL 语句的分析 三、对于外码约束的分析 四、如何处理约束?...总结 ---- 前言 我们使用 MySQL 数据库添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?...一、插入新数据时报错约束? 我们 Course 表插入课程号为 1 的数据提示违反了约束。...三、对于外码约束的分析 我们根据数据库定义的参照完整性规则得知: cpno 的取值不为空的情况下(如上 cpno=‘5’),与其对应的主键 cno 参照表必须存在。...---- 总结 本文我们掌握了 MySQL 数据库如何在设计不合理遇到的外码约束的问题,并通过经典案例为大家分析了为何会出现这样的问题,同时顺着思路来设计业务的解决方案。

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

MySQL 约束

约束 约束用于建立表与表之间的关系,确保引用另一个表的值的完整性。 约束经常和主键约束一起使用,用来确保数据的完整性,即保证该字段的值必须来自于主表的关联列的值。...在从表添加约束,用于引用主表某列的值。 例如,员工信息表,员工所属部门是一个,因为该字段是部门表的主键。...这意味着插入、更新或删除数据MySQL 将检查约束条件(expr)是否满足,如果条件不满足,则不允许进行相应的操作。 如果指定为 NOT ENFORCED,则创建约束但不强制执行。...MySQL 为另一个生成一个名称。 创建默认值约束 建表字段后使用 DEFAULT 添加默认值可创建默认值约束。...-- 添加新的唯一约束 ALTER TABLE table_name ADD UNIQUE (new_unique_column); 修改约束 若要修改约束,通常需要删除原来的约束,然后再添加新的约束

17010

MySQL】04_约束

因为被依赖/被参考的值必须是唯一的 创建约束,如果不给约束命名,默认名不是列名,而是自动产生一个键名(例如student_ibfk_1;),也可以指定约束名。...创建(CREATE)表指定约束的话,先创建主表,再创建从表 删表,先删从表(或先删除外约束),再删除主表 当主表的记录被从表参照,主表的记录将不允许删除,如果要删除数据,需要先删除从表依赖该记录的数据...default方式 (可视化工具SQLyog可能显示空白):父表有变更,子表将列设置成一个默认的值,但Innodb不能识别 如果没有指定等级,就相当于Restrict方式。...添加主键约束,往往需要设置字段自动增加属性。 (4) 并不是每个表都可以任意选择存储引擎? 约束(FOREIGN KEY)不能跨引擎使用。...答:MySQL支持多种存储引擎,每一个表都可以指定一个不同的存储引擎,需要注意的是:约束是用来保证数据的参照完整性的,如果表之间需要关联,却指定了不同的存储引擎,那么这些表之间是不能创建约束

2.4K20

第13章_约束

因为被依赖 / 被参考的值必须是唯一的 (2)创建约束,如果不给约束命名,默认名不是列名,而是自动产生一个键名(例如 student_ibfk_1;),也可以指定约束名。...,需要先删除从表依赖该记录的数据,然后才可以删除主表的数据 (6) “从表” 中指定约束,并且一个表可以建立多个约束 (7)从表的列与主表被参照的列名字可以不相同,但是数据类型必须一样,...例如:员工表,可以添加一个员工的信息,它的部门指定为一个完全不存在的部门。 问题 3:那么建和不建约束和查询有没有关系? 答:没有 MySQL 里,约束是有成本的,需要消耗系统资源。...添加主键约束,往往需要设置字段自动增加属性。 面试 4、并不是每个表都可以任意选择存储引擎? 约束(FOREIGN KEY)不能跨引擎使用。...MySQL 支持多种存储引擎,每一个表都可以指定一个不同的存储引擎,需要注意的是:约束是用来保证数据的参照完整性的,如果表之间需要关联,却指定了不同的存储引擎,那么这些表之间是不能创建约束

31930

⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、、非空....

约束 ⑦【MySQL约束条件 1. 约束的基本使用 2. 约束 ⑦【MySQL约束条件 1. 约束的基本使用 约束: 什么是约束约束是作用于表字段上的规则,用于限制存储的数据。...约束 如何添加约束?: 方式一(创建表指定约束): CREATE TABLE 表名( 字段名 数据类型, ......[CONSTRAINT] [名称] FOREIGN KEY(字段名) REFERENCES 主表(主表字段名) ); 方式二(修改表添加约束): ALTER TABLE 表名 ADD CONSTRAINT...不支持) 添加约束指定更新行为: ALTER TABLE 表名 ADD CONSTRAINT 名称 FOREIGN KEY(字段名) REFERENCES 主表(主表字段名) ON UPDATE...-- 指定何种更新/删除行为以实际为准,这里提供设定为CASCADE(方式二)的参考。 -- 除了修改表添加约束并设定更新/删除行为,还可以新增表(方式一)添加并设置。

394100

MySQL】:约束全解析

本文将深入介绍MySQL的各种约束类型及其使用方法,包括非空约束、唯一约束、主键约束、默认约束、检查约束约束,以及如何在创建表和修改表添加约束,以及约束的相关知识。 一....,保证数据的一致 性和完整性 FOREIGN KEY 注意:约束是作用于表字段上的,可以创建表/修改表的时候添加约束 。...KEY (字段名)REFERENCES 主表 (主表列名) ; 删除外 ALTER TABLE 表名 DROP FOREIGN KEY 名称; 3.3 删除/更新行为 添加之后,再删除父表数据产生的约束行为...(与 NO ACTION 一致) 默认行为 CASCADE 当在父表删除/更新对应记录,首先检查该记录是否有对应,如果有,则 也删除/更新子表的记录。...SET NULL 当在父表删除对应记录,首先检查该记录是否有对应,如果有则设置子表 键值为null(这就要求该允许取null)。

16110

MYSQL约束及修改数据表

) 约束的要求 1:父表和子表必须使用相同的存储引擎,而且禁止使用临时表 2:数据表的存储引擎只能为InnoDB 3:列和参照列必须具有相似的数据类型,其中数字的长度或是否有符号位必须相同,而字符的长度则可以不同...如果列不存在索引的话,MYSQL将自动创建索引 ? ?...33:约束的参照操作 CASCADE:从父表删除或者更新且自动删除或者更新子表匹配的行 《两表插入记录,必须先在父表插入记录》 SET NULL:从父表删除或者更新行,并且设置子表列为...34:表级约束和列级约束 对一个数据列建立的约束,称为列级约束《实际开发多用》 对多个数据列建立的约束,称为表级约束 列级约束既可以列定义声明,也可以列定义后声明, 表级约束只能在列定义后声明。...35:修改数据表(修改,删除) 添加单列 ALTER TABLE 数据表名 ADD 列名称 列定义 [FIRST] 指定添加单列(不可以指定位置) ...

3.2K80

Mysql-5-数据表的基本操作

float,primary key(id,name)); 3.约束用来两个表之间建立联系,它可以是一列或者多列。...一个表可以有一个或者多个对应的是参照完整性,一个表的可以是空值,若不为空值,则每一个必须等于另一个表主键的某个值。 下面介绍几个概念。...是表的一个字段,它可以不是本表的主键,但对应另外一个表的主键。的主要作用是保证数据引用的完整性,定义后,不允许删除另一个表具有关联关系的主键。...例:定义数据表tb_employee5,并且该表创建约束 创建一个部门表tb_dept1,表结构如下表所示 字段名称 数据类型 备注 id int(11) 部门编号 name varchar(22...对于使用了非空约束的字段,如果用户添加数据没有指定值,数据库系统会报错。

1.6K60

数据库之数据表控制语句

可以看到其被标识为了主键,但是创建并没有指定它是主键,而是这一列的属性基本满足了主键的要求,如唯一、不可以为空。...'; 5、添加一个 进行此操作前,需要自行找一个有主键的表(我这里tab1表的name列是主键) tab1表结构: ?...现在将t3表的name列添加为t1表的name列的(其中t3_t1_name为自定义的约束名称): mysql> alter table tab3 add constraint tab3_tab1_...6、删除外 将上面添加删除,tab3_tab1_name是名称。...所以设计的时候。就给表1加入一个,这个就是表2的学号字段。那么这样表1就是主表,表2就是子表。 你的主从关系理解颠倒了。你的图中,表1的确是主表。

1.1K40

SQL笔记(1)——MySQL创建数据库

添加一个约束条件; fk_course_teacher:新约束名称; FOREIGN KEY:指定约束为一个约束; (teacher_id):名称,即参考 teacher 表的哪一列。...这样插入、更新或删除数据MySQL 数据库会自动检查是否符合约束条件,从而保证了表之间的数据一致性。...需要注意的是,MySQL约束可以创建表一起定义,也可以表创建后通过ALTER TABLE语句来添加和修改。...约束是否要和数据库约束名对应上 如果在代码定义了MySQL约束名,则应该在数据库中将其对应的约束名称与之匹配。这是因为MySQL约束名是创建表定义的一种元数据,并将存储在数据库系统表。...因此,开发添加MySQL约束,请务必确保每个约束名称都与实际存储在数据库名称相匹配。此外,应避免使用太长或含义不明的名称,以便在未来快速定位约束问题。

3K20

MySql---复习

复习 MySQL约束(FOREIGN KEY) 主表和从表 选取设置 MySQL 约束的字段 创建表设置约束 部门和员工案例演示 如果添加不符合约束的数据,会报错 小总结 注意事项...级联操作 格式 测试级联操作 ---- MySQL约束(FOREIGN KEY) MySQL 约束(FOREIGN KEY)用来两个表的数据之间建立链接,它可以是一列或者多列。...---- 选取设置 MySQL 约束的字段 定义一个需要遵守下列规则: 父表必须已经存在于数据库,或者是当前正在创建的表。...REFERENCES 主键列1 [,主键列2,…] 其中:键名为定义的约束名称,一个表不能有相同名称;字段名表示子表被约束的字段名;主表名即被子表所依赖的表的名称;主键列表示主表定义的主键列或者列组合...id值 ---- 小总结 被约束的表成为副表,约束别人的表成为主表,设置副表上 主表(参考表)的参考字段通常为主键 添加数据,必须先添加主表,后添加副表 修改数据,必须先修改副表,再修改主表

5.2K30

MariaDB 表的基本操作

本节将介绍创建数据表的语法形式、如何添加主键约束约束、非空约束等.创建表之前,应使用use ,进入一个数据库,以下是一个数据表创建的语法规则:create table (...tb_emp上添加名称为fk_empdept的约束,字段为deptid,其依赖于tb_dept表的,主键id.查看一下结构,理解下吧:MariaDB [lyshark]> desc tb_dept...的数据存储文件或者内存采用的不同技术实现,可以根据自己的需要,选择不同的引擎,甚至可以为每一张表选择不同的存储引擎.MySQL主要存储引擎有:MyISAM、InnoDB、MEMORY、BDB、...◆对于数据库定义的,如果不需要可以将其删除掉,一旦删除,就会解除主表和从表的关联关系,MySQL删除外的语法如下:alter table drop foreign key #约束名:指的是定义表constraint关键字后面的参数删除外: 删除tb_emp的约束1.先来查看一下表的约束.MariaDB [lyshark]> desc tb_emp;+-

1.3K20

MySQL数据库操作教程

其中数字的长度或者是否有符号位都必须相同 但是,若是字符的长度,则可以不同 */ --4.列和参照列必须创建索引,如果列不存在索引。!MySQL将自动创建索引!...必须保证子表列没有指定NOT NULL) 3.RESTRICT:拒绝对父表的删除或更新操作 4.NO ACTION:标准SQL的关键字,MySQL与RESTRICT相同 --例子 CREATE...CONSTRAINT后,有个名称即为约束名 ALTER TABLE 表名 DROP FOREIGN KEY 约束名; SHOW CREATE TABLE 表名; --发现约束已经删除,但是还会存在索引...其中数字的长度或者是否有符号位都必须相同 但是,若是字符的长度,则可以不同 */ --4.列和参照列必须创建索引,如果列不存在索引。!MySQL将自动创建索引!...TABLE 表名 ADD [COLUMN] 添加列名 添加列类型 [FIRST|AFTER 列名称]; --FIRST即为添加至最前,AFTER即为指定列的后面 --若不填写位置,则默认添加至最后方

4.8K10

一篇文章带你彻底了解MySQL各种约束

: 零填充约束 数据库中有三个完整性: 域、实体、参照完整性 域(列)完整性: 域完整性是对数据表字段属性的约束 实体完整性MySQL实现: 通过主键约束和候选约束实现的 参照完整性: 也就是说是...MySQL 1. default 概念 - 指定某列的默认值,插入数据时候,此列没有值,则用default指定的值来填充 添加 - 创建表的时候添加: create .... default...- 被约束的列,取值必须参照其主表列的值 - 注意:通常先创建主表,再创建从表 添加约束 - create table emp(      ...不去明确指定约束名称,系统会自动地生成一个名称。...- 使用 show create table 表名 查看具体的名称 设置的级联关系 - on delete cascade: 删除主表的数据,从表的数据随之删除 - on update

907127

MySQL 系列】MySQL 语句篇_DDL 语句

USE testdb; 我们可以登陆 MySQL 服务器直接指定要操作的数据库。...我们需要同步修改的代码可能包括那些使用了此表的:存储过程、视图、函数、触发器、约束较旧的 MySQL 版本)以及应用程序。...、约束 约束经常和主键约束一起使用,用来确保数据的一致性。...它是可选的; 位于 FOREIGN KEY 关键字之后的是作为的列名; 位于 REFERENCES 关键字之后的是被引用的表和列; ON DELETE 和 ON UPDATE 指定了删除或更新被引用的表的数据要采取的约束策略...CONSTRAINT constraint_name 用于定义一个约束名称。 它是可选的。如果不定义约束名称MySQL 会自动为他生成一个。

11610

MySQL-多表操作

➢引用的表称为丛表。 创建数据表(CREATE TABLE),相应的位置添加约束。 修改数据结构(ALTER TABLE) ,相应的位置添加约束。...关键字CONSTRAINT用于定义约束名称symbol,如果省略,MYSQL将会自动生成-一个名字。...index_ name也是可选参数,表示索引名称,如果省略,MySQL也 会在建立自动创建一个索引, 加快查询速度。...➢具有关联的表的数据,可以通过连接查询的方式获取,并且没有添加约束,关联表的数据插入、更新和删除操作互不影响。...➢对于添加约束的关联表而言,数据的插入、更新和删除操作就会受到一定的约束。 一个具有约束的丛表插入数据字段的值会受主表数据的约束,保证从表插入的数据必须符合约束规范的要求。

3.1K20

4-约束

1.概述 概念:约束是作用于表字段上的规则,用于限制存储的数据。 目的:保证数据库数据的正确、有效性和完整性。...分类: 注意:约束是作用于表字段上的,可以创建表/修改表的时候添加约束。 2. 约束演示 案例需求: 根据需求,完成表结构的创建。...,那加入我们是通过图形化界面来创建表结构 ,又该如何来指定约束呢?...只需要在创建表的时候,根据我们的需要选择对应的约束即可。 3.约束 3.1 介绍 :用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。...语法: alter table emp drop foreign key fk_emp_id; 执行成功 3.3 删除/更新行为 添加之后,再删除父表数据产生的约束行为,我们就称为删除/更新行为

9710

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

MySQL 8.0.16,CREATE TABLE添加了针对所有存储引擎的表和列的CHECK约束的核心特性。...,表达式对所有的数据行评估的结果值为:TRUE或UNKNOWN(对 NULL值),当值为FALSE约束就被违反,产生的效果与执行的语句有关 可选的执行子句标识约束是否需要被强制: 当未指定指定为:...ENFORCED约束被创建且生效 当指定为: NOT ENFORCED约束被创建但未生效 一个CHECK约束可以被指定为表约束或列约束约束不会出现在列定义内,可以引用任意多个或一个列,且允许引用后续定义的表列...:ON UPDATE, ON DELETE被禁止包含CHECK约束的列使用,相应的,CHECK约束也被禁止使用参考动作的列使用 CHECK约束插入、更新、替换(REPLACE)和LOAD DATA...,数据将参考MySQL的类型转换规则被隐式的转换 约束表达式不同的SQL模式下,可能返回不同的结果 另外,INFORMATION_SCHEMA的CHECK_CONSTRAINTS表存放着所有表定义的

1.1K30
领券