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

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

SQL 约束-外键约束简介外键约束(FOREIGN KEY,缩写 FK)是用来实现数据库表的参照完整性的。...相关概念主键:可以唯一标识一条记录的列外键:从表中与主表的主键对应的字段主表:外键所指向的表,约束其他表的表从表:外键所在的表,被约束的表价值:建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性建立外键约束创建表时添加外键约束...:CONSTRAINT [外键约束的名称] FOREIGN KEY (外键字段) REFERENCES [主表名称(主键字段)]添加外键约束:ALTER TABLE [表名] ADD CONSTRAINT...KEY [外键约束名称]注意事项从表外键数据类型必须与主表的主键一致删除数据时,需先删除从表数据再删除主表的数据添加数据时先添加主表数据,再添加从表数据#删除外键约束ALTERTABLEemp_partDROPFOREIGNKEYemp_dept...',20,'female','2')#删除主表中部门id=2的部门DELETEFROMdeptWHEREid=2#查看从表中的数据是否同时被删除SELECT*FROMemp_part总结SQL 中的外键约束是一种参照完整性约束

32510

SQL反模式学习笔记5 外键约束【不用钥匙的入口】

目标:简化数据库架构 一些开发人员不推荐使用引用完整性约束,可能不使用外键的原因有一下几点: 1、数据更新有可能和约束冲突; 2、当前的数据库设计如此灵活,以至于不支持引用完整性约束...1、假设无暇代码:要避免在没有外键约束的情况下产生引用的不完整状态,需要再任何改变生效前执行额外的Select查询, 以此来确保这些改变不会导致引用错误。...合理使用反模式: 如果数据库产品不支持外键约束功能,则不得不使用别的方法来保持引用完整性,比如使用监控脚本。 同样也存在一些极度灵活的数据库设计,外键无法用来表示其对应的关系。...在执行更新和删除2个操作中的任意1个是,数据库都会自动修改多张表中的数据, 外键的引用状态在操作之前和之后都保持完好。...2、外键约束的确需要多那么一点额外的系统开销,但相比于其他的一些选择,外键确实更高效一点: (1)不需要在更新或删除记录前执行Select检查; (2)在同步修改时不需要再锁住整张表

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

    【MySQL】MySQL数据库的初阶使用

    一张表中,主键只能有一个,唯一键可以有多个,所以例如学生id,电话号码,QQ号码等都可以进行唯一键约束,如果你不想让唯一键中出现NULL值,则可以在唯一键约束的基础上再多添加一个not null非空约束...外键约束是innodb存储引擎的一个重要特性,外键一般用于进行表和表之间的关联,用于约束具有关联性的表,比如下面的学生表和班级表,学生是隶属于班级的,比较合理的做法就是创建外键约束,外键为学生表中的class_id...下面是外键约束的探究过程。...如果stu和class表之间没有外键约束的话,则向stu表中插入数据时,有可能误操作将一个学生插入到两个班级,或者将学生插入到不存在的班级,以及删除班级,但班级此时还有学生,如果不添加约束,则学生又到了不存在的班级中了...其实这里的外键,个人觉得和复合主键有那么一点点相似,必须保证外键和引用之间的唯一性,但外键的约束显然是要比复合主键更严格的,比如删除引用(引用中还存在着外键)是不被允许的,一个外键列中的字段只能配一个引用列中的字段

    34630

    Android中SQLite数据库小计

    外键约束和事务 SQLite默认不开启外键约束,可以使用setForeignKeyConstraintsEnabled来开启外键约束。但是不同API版本的行为和设置方式会有差异。...onConfigure和onOpen 一些情况下,数据库是开启了外键约束的,这会影响数据库升级和降级的代码逻辑。...可以使用以下两个方法来达到暂时性的开启和关闭外键约束这样的目的: onConfigure 方法在数据库连接成功后立即执行——在onCreate、onUpgrade和onDowngrade方法的前面。...例如像简单的改表名这样的操作,应该暂时无视外键约束。...在文件系统被占满这样的极端情况下,dbHelper只能返回给我们一个只读的db,但当文件系统又有空闲的时候,dbHelper又会返回一个新的db对象——它是可读写的,之前的db对象被close并释放掉。

    2.1K90

    SQL基础--> 约束(CONSTRAINT)

    函数 –在查询中涉及到其它列的值 FOREIGN KEY 约束 外键约束是用来维护从表和主表的引用完整性的,所以外键约束要涉及两个表。...SET NULL: 子表中相应的列置空 如果子表在建外键时,该列的数据并不在父表,则无法创建该约束。...外键约束对update语句的影响: 主从表都有可能违反外键约束,操作一个表必须将另一个表的数据处理好。 外键约束对DDL语句的影响: 删除主表时,才有可能违约约束。...默认情况下创建的约束是启用的 --添加一个新列comm以及一个check约束并将其置为禁用模式 SQL> ALTER TABLE tb_cons2 2 ADD comm NUMBER(4)...,tb_constraint_1上的外键列约束都被禁用 SQL> SELECT constraint_name,constraint_type,table_name,status,deferrable

    1.7K20

    YashanDB数据完整性

    SQL语句易于编写,同时也可以排除编程的错误。 规则集中且统一:完整性约束定义在表上,存储在数据字典中。所有关于表数据的业务程序操作都必须遵守统一的完整性约束,对约束规则的变动无感知。...完整性约束的类型YashanDB数据库支持在列级和表级应用约束,在建表时,可以直接在关于列的描述后指定约束,也可以在整个建表语句末尾添加约束。...在父键被修改时,为了满足外键约束,参照完整性约束可以指定在子表中的相关行上,执行以下某种操作之一: NO ACTION 在正常的情况下,如果修改结果会违反外键约束,用户不能做此修改。...如果指定启用(ENABLE),插入/更新数据时会检查新数据是否符合约束,违反约束的数据无法插入/更新至表中。如果指定验证(VALIDATE),会验证现有数据是否符合该约束。...DISABLEVALIDATE表中现有数据必须满足约束,但是当前约束失效(约束上的索引也一并删除),未来的新数据无需满足约束。

    5800

    MySQL数据库基础(九):SQL约束

    创建主键约束:创建表时,在字段描述处,声明指定字段为主键 删除主键约束:如需撤销 PRIMARY KEY 约束,请使用下面的 SQL alter table persons2 drop primary...key; 补充:自动增长 我们通常希望在每次插入新记录时,数据库自动生成字段的值。...NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。...四、默认值约束 default 默认值 五、外键约束(了解) 外键约束(多表关联使用) 比如:有两张数据表,这两个数据表之间有联系,通过了某个字段可以建立连接,这个字段在其中一个表中是主键,在另外一张表中...,我们就把其称之为外键。

    14310

    MySQL笔记

    因为建立在关系模型上,就要遵循某些规则,比如数据中某字段值即使为空仍要分配空间 固定的表结构,灵活度较低 非关系型数据库 非关系型数据库又被称为NoSQL(Not Only SQL ),意为不仅仅是 SQL...alter table 表名 add primary key(字段) 自动增长 在创建表时,添加主键约束,使用auto_increment可以来完成值的自动增长 在创建表时,添加主键约束...alter table 表名 modify 字段 类型 auto_increment 外键约束:foreign key 在创建表时,添加外键 create table 表名( 外键列名...key 外键名称 创建表之后,添加外键 alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称...,快速定位数据 多表之间的关系 实现关系 一对多(多对一) 在多的一方建立外键,指向一的一方的主键 多对多 需要借助第三方中间表。

    99710

    MySQL基础SQL编程学习2

    2.NOT NULL : 指示某列不能存储 NULL 值; 如果不向字段添加值就无法插入新记录或者更新记录,否则会报错; 3.UNIQUE : 保证某列的每行必须有唯一的值; 在设置字段为UNIQUE...(即外键表约束主键表) SET NULL:则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(一样是外键表约束主键表,不过这就要求该外键允许取null) 5...补充说明: 1.创建外键约束的方式也可以使用工具plsql来新增外键约束; -- 在创建表的时候指定外键约束 CREATE TABLE 表名 ( column1 datatype null/not....column_n) ON DELETE CASCADE--级联删除 ); -- 在创建表后增加外键约束 ALTER TABLE 表名 ADD CONSTRAINT 外键约束名 FOREIGN KEY...在添加FOREIGN KEY的时候必须先创建外键约束所依赖的表,并且该列为该表的主键(对方表关联字段必须是主键); Oracle数据库中,对指定外键的表进行增删改的情况,子表:谁创建外键谁就是子表,父表

    7.3K30

    Web-第六天 MySQL回顾学习

    如需撤销 PRIMARY KEY 约束,请使用下面的 SQL: ALTER TABLE Persons DROP PRIMARY KEY 2.5.2 自动增长列auto-increment 我们通常希望在每次插入新记录时...NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。...4.1 外键约束 现在我们有两张表“分类表”和“商品表”,为了表明商品属于哪个分类,通常情况下,我们将在商品表上添加一列,用于存放分类cid的信息,此列称为:外键 ? ?...声明外键约束 语法:alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键); [外键名称]...4.2.3 一对一关系:(了解) 在实际的开发中应用不多.因为一对一可以创建成一张表. 两种建表原则: 外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一unique。

    83020

    不用 SQL 的数据仓库

    SQL 能力不足,加上封闭性又导致使用沉重,性能也不高。这是当前 SQL 型数据仓库面临的主要问题。 在 SQL 的基础上引入 Python 能力也不能解决问题。...文件存储的成本更低,在 AP 类计算场景下用户可以随意设计空间换时间的方案,无非就是多存几个文件,即使冗余数据文件多到上万(现代文件系统处理这个规模的文件数据很轻松)也完全没有负担。...延伸阅读:跑在文件系统上的数据仓库 高性能 基于灵活的文件存储,我们就可以根据计算目标灵活设计数据组织(存储)形式以实现高性能。...除了高性能存储支持外,SPL 还提供了诸多大数据与高性能计算机制和算法支持。 SPL 首先在运算能力上提供了游标计算来应对超出内存容量的大数据计算。...、序号分组、…… 外键关联类的外键地址化、外键序号化、索引复用、对位序列、单边分堆、…… 归并与连接类的有序归并、分段归并、关联定位、附表、…… 多维分析类的部分预汇总、时间段预汇总、冗余排序、布尔维序列

    22020

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

    目录 SQL 字段数据类型 查看数据库信息语句 SQL 语句 创建、删除 数据库 数据表 向表中添加、删除 记录、查询记录 修改表名,添加、修改、删除 字段,添加唯一约束 查看、删除、添加 表中的索引...扩展功能,字段值自增等 数据表高级操作 克隆表,将数据表的数据记录生成到新的表中 删除记录后主键记录重头开始自增 创建临时表 创建外键约束,保证数据的完整性和一致性 MySQL 六种约束 ----...源表名); SHOW CREATE TABLE 克隆表名\G; #获取数据表的表结构、索引等信息 注意:直接克隆无法复制原表的 主键、自动增长、约束、索引等配置。...,保证数据的完整性和一致性 外键的定义:如果同一个属性字段X 在表一中是主键,而在表二中不是主键,则字段X称为表二的外键。...主键表和外键表的理解: (1)以公共关键字作主键的表为主键表(父表、主表) (2)以公共关键字作外键的表为外键表(从表、外表) 注意: 1. 与外键关联的主表的字段必须设置为主键。 2.

    5.9K20

    不用 SQL 的开源数据仓库

    SQL 能力不足,加上封闭性又导致使用沉重,性能也不高。这是当前 SQL 型数据仓库面临的主要问题。 在 SQL 的基础上引入 Python 能力也不能解决问题。...文件存储的成本更低,在 AP 类计算场景下用户可以随意设计空间换时间的方案,无非就是多存几个文件,即使冗余数据文件多到上万(现代文件系统处理这个规模的文件数据很轻松)也完全没有负担。...延伸阅读:跑在文件系统上的数据仓库 高性能 基于灵活的文件存储,我们就可以根据计算目标灵活设计数据组织(存储)形式以实现高性能。...除了高性能存储支持外,SPL 还提供了诸多大数据与高性能计算机制和算法支持。 SPL 首先在运算能力上提供了游标计算来应对超出内存容量的大数据计算。...、序号分组、…… 外键关联类的外键地址化、外键序号化、索引复用、对位序列、单边分堆、…… 归并与连接类的有序归并、分段归并、关联定位、附表、…… 多维分析类的部分预汇总、时间段预汇总、冗余排序、布尔维序列

    24520

    【重学 MySQL】四十七、表的操作技巧——修改、重命名、删除与清空

    这通常包括添加新列、删除现有列、修改列的数据类型或约束条件等操作。 添加字段 在MySQL中,为已存在的表添加字段(也称为列)是一个常见的操作,这通常是为了满足新的数据存储需求或适应业务逻辑的变化。...如果表中有外键约束,并且这些外键被其他表引用,则可能无法直接 TRUNCATE 该表。 TRUNCATE TABLE 会重置表的自增计数器(AUTO_INCREMENT)。...此外,DELETE操作会触发相关的触发器和外键约束。...触发器和外键约束 TRUNCATE TABLE:TRUNCATE操作不会触发与表相关的触发器,也不会检查外键约束。因此,如果表被其他表的外键所引用,则可能无法直接TRUNCATE该表。...DELETE FROM:DELETE操作会触发与表相关的触发器,并且会检查外键约束。如果尝试删除的行被其他表的外键所引用,则DELETE操作会失败并返回错误。

    13210

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

    目录 命令 将您的数据库升级到最新 将您的数据库移动到特定的迁移 为迁移生成 SQL 生成迁移 将迁移合并到 master 指南 过滤器 索引 删除列/表 列 表 外键 重命名表 添加列 向列添加 NOT...在这种情况下,首先删除其他表中的外键列,然后返回到此步骤。 通过在列上设置 db_constraint=False,删除此表到其他表的任何数据库级外键约束。...接下来,我们需要删除和 db 级外键约束。...外键 创建外键大多没问题,但是对于像 Project、Group 这样的大/繁忙的表,由于获取锁的困难,它可能会导致问题。您仍然可以创建 Django 级别的外键,而无需创建数据库约束。...这是因为 Postgres 仍然需要对所有行执行非空检查,然后才能添加约束。在小表上这可能没问题,因为检查会很快,但在大表上这可能会导致停机。

    3.6K20

    Java面试手册:数据库 ②

    可以用主键子句或者主键短语来定义 建表时定义主键 添加主键 参照完整性:又称引用完整性,指标简的规则,卓用于有关联的两张或两张以上的表,通过使用主键和外键(或为一键)之间的关系,使表中键值在相关表中保持一致...可用外键子句来定义。 建表时定义外键 添加外键 用户自定义完整性:指针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。...类型,int类型占用空间小,检索更快 主键自增:在添加一条记录的时后,不需要设置主键的值,自动生成新数据的主键,每次加一。...java和数据库的对应关系)给表中的一个字段添加一个外键属性(从表),让它由相应的主键约束(主表),与其他表的主键构成关联关系,主键约束外键。...//给表中添加外键 create table student ( id int primary key auto_increment,//主键设置每张表都有,并且在代码的第一行

    1.3K20

    超详细的MySQL三万字总结

    图形化界面备份与还原 数据库表的约束 数据库约束的概述 主键约束 唯一约束 非空约束 默认值 外键约束 表与表之间的关系 表关系的概念 一对多 多对多 一对一 数据库设计 数据规范化 1NF 2NF...数据库的概念 什么是数据库 存储数据的仓库 本质上是一个文件系统,还是以文件的方式存在服务器的电脑上的。...一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。...什么是外键约束: 什么是外键:在从表中与主表主键对应的那一列,如:员工表中的 dep_id 主表: 一方,用来约束别人的表 从表: 多方,被别人约束的表 创建约束的语法: 1、新建表时增加外键...employee 表的 emp_depid_fk 外键 alter table employee drop foreign key emp_depid_fk; -- 在 employee 表情存在的情况下添加外键

    3.4K30

    数据库_mysq单表操作

    如需撤销 PRIMARY KEY 约束,请使用下面的 SQL: ALTER TABLE Persons DROP PRIMARY KEY 3.2 自动增长列 我们通常希望在每次插入新记录时,数据库自动生成字段的值...NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。...3.4.1 添加唯一约束 与主键添加方式相同,共有3种, l 方式1:创建表时,在字段描述处,声明唯一: CREATE TABLE Persons( Id_P int UNIQUE, LastName...l 如需撤销 UNIQUE 约束,请使用下面的 SQL: ALTER TABLE Persons DROP INDEX 名称 如果添加唯一约束时,没有设置约束名称,默认是当前字段的字段名。...3.5 外键约束 FOREIGN KEY 表示外键约束,将在多表中学习。

    1.4K50

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

    语句在 course 表上添加一个外键约束,其中包含了以下几个关键字(具体解释参考Q&A部分): ALTER TABLE:用于修改已存在的表结构; course:要修改的表名; ADD CONSTRAINT...:添加一个约束条件; fk_course_teacher:新约束的名称; FOREIGN KEY:指定该约束为一个外键约束; (teacher_id):外键列名称,即参考 teacher 表中的哪一列。...下面是一个使用 ALTER TABLE 添加新列的示例 SQL 语句: ALTER TABLE 表名 ADD 列名 数据类型; 其中,表名 表示要修改的目标表名,列名 表示要添加的新列名,数据类型...可以使用 ADD CONSTRAINT 添加多种类型的约束,例如主键约束、唯一性约束、外键约束等等。...需要注意的是,在执行该命令之前,应当确保目标表中已经包含所需的列和数据,并且这些列应当定义为不可空(即 NOT NULL)。否则,会因为无法满足约束条件而导致添加约束失败。

    3.1K20
    领券