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

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

文章目录 前言 一、插入新数据时报错约束? 二、对于出错 SQL 语句的分析 三、对于外码约束的分析 四、如何处理约束?...总结 ---- 前言 我们在使用 MySQL 数据添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?...---- 说明:本次案例的案例情景是传统的数据库表:学生-课程数据库。 一、插入新数据时报错约束?...我们在 Course 表中插入课程号为 1 的数据提示违反了约束,插入命令如下: insert into course(cno,cname,cpno,ccredit) values('1','数据库...但是我们反观上面操作,第一个插入的就是 cno=‘1’ 的数据,cno=‘5’ 的还没有插入,很显然不满足参照完整性规则。 四、如何处理约束

3K20

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

文章目录 前言 一、插入新数据时报错约束? 二、对于出错 SQL 语句的分析 三、对于外码约束的分析 四、如何处理约束?...总结 ---- 前言 我们在使用 MySQL 数据添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?...---- 本次案例的案例情景是传统的数据库表:学生-课程数据库。 一、插入新数据时报错约束? 我们在 Course 表中插入课程号为 1 的数据提示违反了约束。...三、对于外码约束的分析 我们根据数据库定义的参照完整性规则得知: cpno 的取值不为空的情况下(如上 cpno=‘5’),与其对应的主键 cno 在参照表中必须存在。...但是我们反观上面操作,第一个插入的就是 cno=‘1’ 的数据,cno=‘5’ 的还没有插入,很显然不满足参照完整性规则。 四、如何处理约束

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

轻松学习SQL约束的核心原理和实用技巧

SQL 约束-约束简介约束(FOREIGN KEY,缩写 FK)是用来实现数据库表的参照完整性的。...相关概念主键:可以唯一标识一条记录的列:从表中与主表的主键对应的字段主表:所指向的表,约束其他表的表从表:所在的表,被约束的表价值:建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性建立约束创建表添加约束...:CONSTRAINT [约束的名称] FOREIGN KEY (字段) REFERENCES [主表名称(主键字段)]添加约束:ALTER TABLE [表名] ADD CONSTRAINT...KEY [约束名称]注意事项从表数据类型必须与主表的主键一致删除数据,需先删除从表数据再删除主表的数据添加数据添加主表数据,再添加从表数据#删除外约束ALTERTABLEemp_partDROPFOREIGNKEYemp_dept...当在子表中插入或更新数据约束确保所提供的键值必须在父表的相应主键或唯一键值范围内。如果父表中不存在相应的值,则操作将失败,从而确保了数据的完整性和一致性。

18910

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

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

1.6K50

1-3 SQL与建立关系型数据

另外对于主键以及的设计必须按照数据库概念设计模型进行规划设计后才可以实施,具体设计的方法和步骤见数据库模式设计篇章。 ? ?...图1-16 添加基本表和基本关系图 第六步:在基本关系图之中,用鼠标左键点击某张表的,将之拖至父表的主键上,从而建立起主、的关联。...qPrimary Key:主键约束。 qforeign key 本表中的外码 .references 对应主表中的主键:约束。 qCHECK:用户自定义的约束条件,根据实际需要而定。 2....Alter table teacher drop fk1 Alter table teacher drop column 教研号码 --例7:更改一条约束 alter table sc add...父表是主键所在表,子表是所在表,根据参照完整性规则,必须受制于主键集合的约束添加信息或者为空,否则必须出自主键集合。如果先删除父表,则将无所依靠,必将产生错误。

1.3K10

MySql---复习

复习 MySQL约束(FOREIGN KEY) 主表和从表 选取设置 MySQL 约束的字段 在创建表设置约束 部门和员工案例演示 如果添加不符合约束数据,会报错 小总结 注意事项...---- 选取设置 MySQL 约束的字段 定义一个,需要遵守下列规则: 父表必须已经存在于数据库中,或者是当前正在创建的表。...---- 在创建表设置约束数据表中创建使用 FOREIGN KEY 关键字,具体的语法规则如下: [CONSTRAINT ] FOREIGN KEY 字段名 [,字段名2,…]...id值 ---- 小总结 被约束的表成为副表,约束别人的表成为主表,设置在副表上 主表(参考表)的参考字段通常为主键 添加数据,必须先添加主表,后添加副表 修改数据,必须先修改副表,再修改主表...",10); #添加一个符合约束数据 INSERT INTO emp (e_name,d_id) VALUES("大朋友",2); 注意观察主键id自增 如果插入的数据因为不符合约束插入失败

5.2K30

MySQL 数据库 增删查改、克隆、 等操作

目录 SQL 字段数据类型 查看数据库信息语句 SQL 语句 创建、删除 数据数据表中添加、删除 记录、查询记录 修改表名,添加、修改、删除 字段,添加唯一约束 查看、删除、添加 表中的索引...扩展功能,字段值自增等 数据表高级操作 克隆表,将数据表的数据记录生成到新的表中 删除记录后主键记录重头开始自增 创建临时表 创建约束,保证数据的完整性和一致性 MySQL 六种约束 ----...','已过期'); #触发唯一约束,新增失败 UNIQUE KEY 唯一:可以用有空值,不能出现重复值,也不能为 NULL, 查看、删除、添加 表中的索引 #查看表有哪些索引 SHOW INDEXES...; #自增长字段必须是主键;字段类型必须是 int 类型,如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次 #unique key:表示此字段唯一约束,此字段数据不可以重复;一张表中只能有一个主键...,保证数据的完整性和一致性 的定义:如果同一个属性字段X 在表一中是主键,而在表二中不是主键,则字段X称为表二的

5.8K20

SQL表之间的关系

SQL表之间的关系要在表之间强制执行引用完整性,可以定义。修改包含约束的表,将检查约束。定义有几种方法可以在InterSystems SQL中定义:可以定义两个类之间的关系。...定义关系会自动将约束投影到SQL。可以在类定义中添加显式定义(对于关系未涵盖的情况)。可以使用CREATE TABLE或ALTER TABLE命令添加。...引用完整性检查约束可以指定更新或删除的引用操作。 在CREATE TABLE reference action子句中描述了使用DDL定义这个引用操作。...参照完整性检查失败会生成如下错误:错误#5540:SQLCODE:-124消息:表'HealthLanguage.FKey2'中至少存在1行,该行引用NewIndex1-约束'NewForeignKey1...父表和子表插入数据在将相应的记录插入子表之前,必须将每个记录插入父表。

2.4K10

mysql学习笔记(四)约束与索引

KEY约束约束表之间的关系 一、主键约束(primary key constraint)  主键创建默认会自动生成约束,也可通过显示声明。 ...二、约束(foreign key constraint)  创建默认会自生成约束,也可通过显示声明。 ...一个表可以有很多的约束 约束需要一个表的两个字段或者两个表的两个字段之间建立约束 约束一定是在从表、子表中建立的。...ID值有自动递增的特性,当语句执行失败或事务回滚,ID值不会回滚,这会导致ID列的值不连续。...not null; PS 约束的删除方法 alter table 数据库名.数据表名 drop index 约束约束有多种方法添加 添加not null/unique/key的尾缀, 添加foreign

2K00

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

PRIMARY KEY ④默认约束—— 保存数据,未指定该字段的值,则采用默认值 DEFAULT ⑤检查约束(8.0.16版本之后)—— 保证字段满足某一条件 CHECK ⑥约束—— 用来让两证表的数据之间建立连接...约束 如何添加约束?: 方式一(在创建表指定约束): CREATE TABLE 表名( 字段名 数据类型, ......[CONSTRAINT] [键名称] FOREIGN KEY(字段名) REFERENCES 主表(主表字段名) ); 方式二(在修改表添加约束): ALTER TABLE 表名 ADD CONSTRAINT...不支持) 添加约束指定更新行为: ALTER TABLE 表名 ADD CONSTRAINT 键名称 FOREIGN KEY(字段名) REFERENCES 主表(主表字段名) ON UPDATE...-- 除了在修改表添加约束并设定更新/删除行为,还可以在新增表(方式一)添加并设置。

429100

Sentry 开发者贡献指南 - 数据库迁移

目录 命令 将您的数据库升级到最新 将您的数据库移动到特定的迁移 为迁移生成 SQL 生成迁移 将迁移合并到 master 指南 过滤器 索引 删除列/表 列 表 重命名表 添加添加 NOT...在这种情况下,首先删除其他表中的列,然后返回到此步骤。 通过在列上设置 db_constraint=False,删除此表到其他表的任何数据库级约束。...接下来,我们需要删除和 db 级约束。... 创建大多没问题,但是对于像 Project、Group 这样的大/繁忙的表,由于获取锁的困难,它可能会导致问题。您仍然可以创建 Django 级别的,而无需创建数据约束。...如果旧代码尝试表中插入一行,则插入将失败,因为旧代码不知道新列存在,因此无法为该列提供值。 添加 NOT NULL 将 not null 添加到列可能很危险,即使该列的表的每一行都有数据

3.6K20

Oracle - 数据库对象

1 -- 使用视图 2 select * from v$empinfo; 3 4 -- 删除视图 5 drop view v$empinfo; 6 7 -- 视图添加数据 8 insert into...视图一般只是基表的部分数据,通过视图基表添加数据,基本的数据只能添加一部分,此时基表会对未提供的字段置null。如果基表对未提供的字段要求不能为null,此次添加失败。...常见约束: NOT NULL 非空 UNIQUE Key 唯一 PRIMARY KEY 主键 FOREIGN KEY CHECK 自定义检查约束 6.1 主键约束 主键用于唯一标识一条记录。...当表中的某个字段和另外一个表的主键字段相互关联,可以设定约束。...CASCADE方式:将依赖表中所有键值与主表中要删除的主键值相对应的记录一起删除 SET NULL方式:将依赖表中所有与主表中被删除的主键值相对应的键值设为空值 可以在建表对外约束的删除规则进行设定

78110

第三章《数据表的基本操作》

完整性约束条件对字段进行限制,要求用户只能字段中写入符合条件的数据,如果不满足约束条件数据库将不执行该数据的写入操作。...(父表主键列) 注意; 1.关联的父表列,一定是父表的主键列 2.关联的父表如果为联合主键是,先关联联合主键中的第一个字段 3.关联父表,被关联的数据类型要和父表主键的数据类型一致,否则关联失败...4.关联父表,父表和子表的存储引擎必须为InnoDB,MyISAM引擎不支持功能。...5.要避免书写错误 6.如果两个表之间有关联,如果我们想要删除父表,必须先解除外的关系,或者先删除掉子表, 否则无法删除父表 2.4使用非空约束 非空约束指字段的值不能为空 语法: 在创建表...字段名 数据类型 NOT NULL 2.5 唯一约束: 给字段的值添加唯一属性,添加之后,该字段不能插入重复的值 语法; 1.直接在创建表,再要设置唯一性的字段数据类型后添加UNIQUE

1.2K10

第三章《数据表的基本操作》

完整性约束条件对字段进行限制,要求用户只能字段中写入符合条件的数据,如果不满足约束条件数据库将不执行该数据的写入操作。...2.3使用用来在两个数据表之间建立连接,它可以是一列,也可以是多列; 语法: 在创建表的时候添加 字段1 数据类型 [完整性约束], 字段2 数据类型 [完整性约束], 字段N...注意; 1.关联的父表列,一定是父表的主键列 2.关联的父表如果为联合主键是,先关联联合主键中的第一个字段 3.关联父表,被关联的数据类型要和父表主键的数据类型一致,否则关联失败 4.关联父表...5.要避免书写错误 6.如果两个表之间有关联,如果我们想要删除父表,必须先解除外的关系,或者先删除掉子表, 否则无法删除父表 2.4使用非空约束 非空约束指字段的值不能为空 语法: 在创建表...2.5 唯一约束: 给字段的值添加唯一属性,添加之后,该字段不能插入重复的值 语法; 1.直接在创建表,再要设置唯一性的字段数据类型后添加UNIQUE 2.在所有字段后面添加:[CONSTRAINT

1.4K10

MySQL操作之数据查询语言:(DQL)(四-2)(多表查询)

从表类型,必须与主表主键类型一致。 建立的表必须是InnDB型,不能是临时表。 键名不能用引号。FK_ID错误。应为FK_ID。、 添加数据:从表的,只能添加主表主键中存在的数据。...1.1 添加约束 ALTER TABLE 表名 ADD CONSTRAINT 键名 FOREIGN KEY (从表) REFERENCES 主表 (主键); 真实: ALTER TABLE student...ADD CONSTRAINT FK_ID FOREIGN KEY (gid) REFERENCES grade (id); 1.2 约束 建立约束是为了保证数据的完整性和一致性,但是如果主表中数据被删除或修改...ALTER TABLE 表名 DROP FOREIGN KEY 键名; 具体: ALTER TABLE student DROP FOREIGN KEY FK_ID; 二、一对多操作 1.添加主外约束...1、创建中间表,给中间表添加两个约束 2、创建表、添加数据 订单表和订单项表的主外关系 alter table `orderitem` add constraint orderitem_orders_fk

25030

Hibernate配置文件详解-2

,打印3条SQL语句,customer表添加1条记录,orders表添加2条记录,并且将customer的id值赋给cid字段,建立主外约束关系。...,打印5条SQL,customer表添加1条记录,orders表添加2条记录,并且将customer的id值赋给cid字段,建立主外约束关系。...因为当前Customer和Orders对象都在维护关系,所以会重复建立两次主外约束。 如何避免这种情况的出现呢? 第一种方式:在Java代码中去掉一方维护关系的代码。...我们知道在删除一条主表数据,一定要先清除被它约束的从表记录, 即在删除Customer对象,必须先删除该对象对应的Orders对象,否则直接报错。 ? ?...错误原因是因为被删除记录的主键正在约束orders表中的,必须先解除约束关系,才可删除。 如何解决?

59820

MySQL 约束

约束 约束用于建立表与表之间的关系,确保引用另一个表中的值的完整性。 约束经常和主键约束一起使用,用来确保数据的完整性,即保证该字段的值必须来自于主表的关联列的值。...在从表添加约束,用于引用主表中某列的值。 例如,在员工信息表中,员工所属部门是一个,因为该字段是部门表的主键。...), UNIQUE (name, email) ); 创建约束 建表使用 FOREIGN KEY 引用主表创建。...对于主键约束、唯一约束约束和检查约束,它将是一个用户定义的名称。 TABLE_SCHEMA:这是包含受约束表的数据库的名称。它指定了受约束表所在的数据库。...-- 添加新的唯一约束 ALTER TABLE table_name ADD UNIQUE (new_unique_column); 修改约束 若要修改约束,通常需要删除原来的约束,然后再添加新的约束

17910

SQL操作六

约束(foreign key) 1.4.4.1. 创建约束 1.4.4.2. 总结 1.4.5. 非空约束(not null) 1.4.6....添加唯一约束的字段,这个字段的值不能重复,否则报错 crate table t(id int ,age int unique); 主键约束 (primary key) 创建表添加主键约束 create...(foreign key) 约束是保证一个表或者两个表之间数据一致性和完整性的约束 工作中除非特殊情况,一般不使用约束,通过代码逻辑进行限制,避免测试不必要的麻烦 的值通常是另外一张表的主键...可以重复,可以为null,但不能是另外一张表中不存在的数据 - 使用约束的条件: 必须保证两张表使用相同的引擎(engine) 引擎必须是innodb,myisam不支持约束 和关联字段必须是相同的数据类型...,使用必须两张表使用innodb引擎,数据类型要一致,会自动添加索引 非空约束(not null) 该字段的值不能为null,否则报错 默认约束(default) 给字段设置默认值 create table

80110

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

这样在插入、更新或删除数据,MySQL 数据库会自动检查是否符合约束条件,从而保证了表之间的数据一致性。...需要注意的是,当我们一个已存在的表中添加新的列,新的列默认值为 NULL,如果需要给新的列赋默认值,可以使用 DEFAULT 关键字。...约束:可以确保表中指向其他表的字段只包含该表中存在的值。约束还可以防止删除数据出现意外情况(例如删除了被其他表所引用的数据)。...约束名是否要和数据库中的约束名对应上 如果在代码中定义了MySQL约束名,则应该在数据库中将其对应的约束名称与之匹配。这是因为MySQL约束名是在创建表定义的一种元数据,并将存储在数据库系统表中。...当修改或删除已存在的约束,MySQL需要确切地知道哪个约束必须进行更改。 如果代码中定义的MySQL约束名与实际数据库中所存储的不匹配,则会导致错误。

3K20
领券