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

《深入浅出SQL》问答录

有办法确定外键已经连接到父键了吗? A:外键为NULL,表示在父表中没有相符的主键。但我们可以确认外键包含有意义、已经存储在父表中的值,请通过约束实现。...不能单纯的使用另一张表的键,称之为外键,而不加上约束吗? A:其实可以,但创建成外键约束后,就只能插入已经存在于父表中的值,有助于加强两张表间的连接。 加强连接?是什么意思?...如果我们试着删除主键表中的行或者是改变主键值,而这个主键是其他表的外键约束时,你就会收到错误警告。 所以上面说的那种,我就不能删除了是吗? A:还是可以的,先移除外键行即可。...插入外键列的值必须已经存在与父表的来源中,这是引用完整性。 创建外键作为表的约束提供了明确的优势,如果违反了规则,约束会阻止我们破坏表。 外键不一定要是父表的主键,但是要具有唯一性。 ?...部分函数依赖:非主键的列依赖与组合键的某个部分(但不是完全依赖与组合主键)。 传递函数依赖:如果改变任何非键列可能造成其他列的改变,即为传递依赖。

2.9K50

MySQL表的增删改查(进阶)

表里最多只能有一个主键。 对于整数类型的主键,常配搭自增长auto_increment来使用。...KEY AUTO_INCREMENT, name VARCHAR(20) ); FOREIGN KEY:外键约束 FOREIGN KEY:保证一个表中的数据与另一个表的数据相匹配,确保表与表之间的参照完整性...(因为有约束,导致不能随意修改父键与子键) 对于父键必须要被unique或primary key 修饰 CHECK约束 CHECK:用于限制列的值,确保数据符合给定的条件。...一对多 一种常见的表关系,在这种关系中,父表的每一条记录可以与子表中的多条记录相关联。 多对多 多对多关系通常需要一个中间表来映射两张表的关系。 4....FROM 表1,表2 where 表1.列名 = 表2.列名; ​ 6.2 左连接(LEFT JOIN) 左连接(也叫左外连接)返回左表中的所有记录,以及右表中匹配的记录。

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

    MySQL(五)之DDL(数据定义语言)与六大约束

    外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。     ...2)外检的特点       2.1)、外键约束可以描述任意一个字段(包括主键),可以为空,并且一个表中可以有多个外键。但是外键字段中的值必须是另一张表中的主键。       ...2.3)、子表被外键约束修饰的字段必须和父表的主键字段的类型一样。     注意:一个表中有被外键修饰的字段,就称该表有外键(是“有外键”。...而不是“是外键”),并会给该表中的外键约束取一个名称,所以我们常说的这个表有没有外键,指的不是被外键约束修饰的字段名,而是指这个表是否有存在外键约束。         ...tableA和tableB两个表,被外键约束修饰的字段为tableB中的deptId,主键字段为tableA中的id  4.3、非空约束     NOT NULL:被该约束修饰了的字段,就不能为空,主键约束中就包括了这个约束

    2K90

    mysql常见的建表选项和约束

    中,可以通过该表查询约束信息 常见的约束类型 not null非空,指定某列不为空(注意区分空和空格的关系) unique:唯一约束,指定某列和几列组合的数据不能重复 primary key:主键约束,...foreign key外键约束 参照完整性约束,保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或者是两个表的两个字段之间的参照关系 注意: 具有外键约束的列的值不能随便给,必须满足外键所引用的主键的取值...一张表中可以定义多个外键 外键列默认可以给null值 父子表 外键所在的表叫做子表,从表 外键所引用的主键所在的表叫做父表,主表 constraint emp_deptid_fk foreign_key...(deptid) references dept(deptid) 外键的删除规则 当删除父表中的行时,如果子表中有依赖被删除的父行的子行存在,那么就不允许删除,并抛出异常(默认对外键使用on delete...1,不会覆盖原来删除的编号 列的数值自动增长,列的类型只能是整数类型 通常给主键添加自增长约束

    15610

    MySql---外键复习

    外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。 外键的主要作用是保持数据的一致性、完整性。...---- 主表和从表 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。...也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。 外键中列的数目必须和父表的主键中列的数目相同,因为有组合主键和组合外键。...外键中列的数据类型必须和父表主键中对应列的数据类型相同。...) VALUES("大忽悠",1); ---- 如果添加不符合外键约束的数据,会报错 这里员工的d_id列的值被depart父表的主键列所约束,即从表的d_id的值必须属于父表的主键列集合里面的

    5.2K30

    MySQL基础SQL编程学习2

    ) : NOT NULL 和 UNIQUE 的结合; 约束唯一标识数据库表中的每条记录确保某列(或两个列多个列的结合)有唯一标识主键(键、值)且主键列不能包含 NULL 值,有助于更容易更快速地找到表中的一个特定的记录...一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键),FOREIGN KEY 约束用于预防破坏表之间连接的行为,也能防止非法数据插入外键列因为它必须是它指向的那个表中的值之一...(即外键表约束主键表) SET NULL:则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(一样是外键表约束主键表,不过这就要求该外键允许取null) 5..."P_Id" 列是 "Persons" 表中的 PRIMARY KEY (主键表) -- "Orders" 表中的 "P_Id" 列是 "Orders" 表中的 FOREIGN KEY (外键表) -...在添加FOREIGN KEY的时候必须先创建外键约束所依赖的表,并且该列为该表的主键(对方表关联字段必须是主键); Oracle数据库中,对指定外键的表进行增删改的情况,子表:谁创建外键谁就是子表,父表

    7.3K30

    【MySQL】表的增删查改(进阶)

    注意: 实际开发中,大部分的表,一般都会带有一个主键,主键往往是一个整数表示的id 在mysql中,一个表里,只能有一个主键,不能有多个 虽然主键不能有多个,mysql允许把多个列放到一起共同作为一个主键...外键约束的含义,就是要求student里的classId 务必要在class表的id列中存在。 学生表中的数据要依赖班级表的数据。班级表的数据要对学生表产生约束力。...此处起到约束作用的班级,就叫做“父表”(parent),被约束的这个表,就叫做子表(child)。 外键约束,是父表对 子表做了约束,但与此同时。子表也在反过来约束了父表。...默认情况下查询是需要遍历表的。在表非常大的时候,遍历效率非常低,所以要使用索引。 要想创建外键,就要求父表的对应的列,得有primary key 或者unique约束。...但是如果表不是一一对应,内连接和外连接就有区别了。 左外连接:会把左表的结果尽量列出来,哪怕在右表中没有对应的记录,就使用NULL填充。

    3.1K20

    数据库MySQL详解

    (约束子表数据操作) 对父表约束: 父表数据进行写操作(删和改: 都必须涉及到主键本身), 如果对应的主键在子表中已经被数据所引用, 那么就不允许操作 4.4.4 外键条件 1.外键要存在: 首先必须保证表的存储引擎是...innodb(默认的存储引擎): 如果不是innodb存储引擎,那么外键可以创建成功,但是没有约束效果. 2.外键字段的字段类型(列类型)必须与父表的主键类型完全一致. 3.一张表中的外键名字不能重复.... 4,增加外键的字段(数据已经存在),必须保证数据与父表主键要求对应. 4.4.5 外键约束 所谓外键约束: 就是指外键的作用....必须先删除子表的约束数据才能删除父表的数据,那这样就失去了增减改查的灵活性了,并且更严重的是, 如果形成外键闭环,我们将无法删除任何一张表的数据记录。 如上图,A约束B,B约束C.........解决方案: 将代课时间拆分成两个字段就解决问题. 6.2 2NF 第二范式: 在数据表设计的过程中,如果有复合主键(多字段主键), 且表中有字段并不是由整个主键来确定, 而是依赖主键中的某个字段(主键的部分

    2.5K10

    《深入浅出SQL》问答录(六)

    A:外键为NULL,表示在父表中没有相符的主键。但我们可以确认外键包含有意义、已经存储在父表中的值,请通过约束实现。...---- Q:不能单纯的使用另一张表的键,称之为外键,而不加上约束吗? A:其实可以,但创建成外键约束后,就只能插入已经存在于父表中的值,有助于加强两张表间的连接。...插入外键列的值必须已经存在与父表的来源中,这是引用完整性。 创建外键作为表的约束提供了明确的优势,如果违反了规则,约束会阻止我们破坏表。 外键不一定要是父表的主键,但是要具有唯一性。...Junction table(连接表) 范式(NF) 第一范式(1NF) 数据列只包含具有院子性的值 没有重复的数据组 组合键 组合键就是有多个数据列构成的主键。...部分函数依赖:非主键的列依赖与组合键的某个部分(但不是完全依赖与组合主键)。 传递函数依赖:如果改变任何非键列可能造成其他列的改变,即为传递依赖。 第三范式(3NF) 符合2NF 没有传递函数依赖性

    1.1K20

    【MySQL学习】基础指令全解:构建你的数据库技能

    确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 注:一张表里只能有一个 primary key....主键能够唯一的标识表中的每一条记录,可以结合外键,来定义与不同数据表之间的关系。 怎么理解主键呢?...,我们统一将外部关键字叫做外键,外键就是另一张表中的主键。...问:外键有啥用啊? 答:外键的主要作用就是保持数据的一致性,完整性。 如图有两张表,classId 是 T_Student 的外键,同时是 T_class 表的主键。...外键用于关联其他表的主键或唯一键 案例: 对学生表进行数据插入: 注:当我们想删除父表时,则需要先删除 子表,再删除 父表。

    15310

    MySQL 约束介绍

    +非空约束的组合,主键约束列不允许重复,也不允许出现空值 一个表最多只能有一个主键约束 主键约束对应着表中的一列或者多列 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复...MODIFY 字段名 数据类型; 5、外键约束 限定某个表的某个字段的引用完整性 从表的外键列,必须引用/参考主表的主键或唯一约束的列 在创建外键约束时,如果不给外键约束命名,默认名不是列名,而是自动产生一个外键名...#(从表的某个字段)的字段名可以与主表名(被参考字段)的字段名一样,也可以不一样 -- FOREIGN KEY: 在表级指定子表中的列 -- REFERENCES: 标示在父表中的列 约束等级 Cascade...方式:在父表上update/delete记录时,同步update/delete掉子表的匹配记录 Set null方式:在父表上update/delete记录时,将子表上匹配记录的列设为null,但是要注意子表的外键列不能为...Set default方式:父表有变更时,子表将外键列设置成一个默认的值,但Innodb不能识别 6、默认值约束 给某个字段/某列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默

    1.6K41

    Entity Framework 继承映射

    父类中的某些属性对于子类来说并不是必需的,因此Code First 会将改属性创建为可空列。TPH策略因为有 discriminator 列的存在,维护性不强,因此违反了第三范式。...一、TPT TPT是常用的策略,通过外键来表示继承,父类和子类分别位于不同的表中,子类表包含自身属性列和父类表的外键,并将父表的外键作为子类表的主键。...与父类的多态关联将被表示为引用父类表的外键。缺点在于性能极差,如果要进行查询就要多表连接查询。...二、 TPC TPC是不被推荐的策略,因为他会为每个子类创建一个表,并且将父类中的所有属性映射进每个子类表中。...,因此插入到子类表中的数据会存在重复的主键。

    82310

    推荐学Java——数据表操作

    自然主键(推荐使用,主键尽量不要和业务数据挂钩) 业务主键(比如用学号做主键,一单业务有变化,主键相关表可能就会有问题) 外键约束:foreign key 一张表中的某个字段在另外一张表中被标记为外键约束...被标记字段的表称为子表,另外一张表叫父表 删除数据,先删除子表,再删除父表 插入数据,先插入父表,再插入子表 语法格式: ```sql foreign key(列名) references 父表表名(父表中要被添加的列名...); ``` 外键(父表中的列)不一定要是主键,但至少具有 unique 约束;外键可以为Null ....by 将表中某列值相同的记录放在一起,称为一组。...truncate 和 delete from 表名; 删除表中数据有何区别? 前者是将表直接删除,然后重新创建表,表中无数据。后者是一条一条删除表中所有数据。

    2.6K20

    MySQL常用基础 - 小白必看

    定义:外键约束是表的一个特殊字段,经常和主键约束一起使用,对于两个具有关联关系的表来说,相关字段中主所在表就是主表(父表),外键所在表就是从表(子表) 特点(定义一个外键时,需要遵守的规则): 主表必须已经存在于数据库中...,或者是当前正在创建的表 必须为主表定义主键 主键不能包含空值,但是允许在外键中出现空值,也就是说,只要外键的每个非空值出现在指定的主键中,那么这个外键的内容就是正确的 在主表的表名后面指定列名或列名的组合...,那么这个列或列的组合必须是主表的主键或候选键 外键中列的数目必须和主表的主键中的列的数目相同 外键中列的数据类型必须和主表的主键中的列的数据类型相同 方式一:在创建表的时候设置外键约束 语法: constraint...实现:在多的一方建立外键,指向一的一方的主键 多对多关系: 例如:学生和课程 实现:需要借助第三张中间表,中间表至少包含两个字段,将多对多的关系拆成一对多的关系,中间表至少有两个外键,分别指向原来两个表的主键...join 4,子连接查询:select的嵌套 5,表的自关联:将一张表当成多张表使用 查询种类 特点 关键字 全连接 交叉连接(笛卡尔积),把两张表的数据进行交叉组合,A*B 了解 内连接 两表的交集部分

    1.2K30

    MySQL数据库,从入门到精通:第十三篇——MySQL数据表约束详解

    中数据表相关操作的技巧和方法。...,可设置自增长 ( 3 )自增长列约束的列必须是键列(主键列,唯一键列) ( 4 )自增约束的列的数据类型必须是整数类型 ( 5 )如果自增列指定了 0 和 null,会在当前最大值的基础上自增;...如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据 ( 6 )在“从表”中指定外键约束,并且一个表可以建立多个外键约束 ( 7 )从表的外键列与主表被参照的列名字可以不相同,...Set null方式:在父表上update/delete记录时,将子表上匹配记录的列设为null,但是要注意子 表的外键列不能为not null No action方式:如果子表中有匹配的记录,则不允许对父表对应候选键进行...update/delete操作 Restrict方式:同no action, 都是立即检查外键约束 Set default方式(在可视化工具SQLyog中可能显示空白):父表有变更时,子表将外键列设置成一个默认的值

    24610

    SqlAlchemy 2.0 中文文档(七十九)

    通过使外键引用对象的父行 NOT NULL,数据库会以与 SQLA 允许大多数其他操作相同的方式建立数据一致性。如果对象的父外键可为空,则可以插入行。...通过使对象的外键引用对象的父行为 NOT NULL,数据库会以 SQLA 允许大多数其他操作执行的方式确保数据一致性,从而实现“孤儿检查”的等效行为。如果对象的父外键是可为空的,则可以插入行。...通过将对象的外键引用设置为对象的父行的 NOT NULL,数据库会在确立数据一致性方面发挥作用,SQLA 允许大多数其他操作以相同的方式完成。如果对象的父外键可为空,则可以插入行。...,跨两个表的连接继承加载将从子表的值填充,而不是父表的值。...,跨两个表的连接继承加载将从子表的值填充,而不是父表的值。

    10210

    数据库面试题汇总

    主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。 外键:在一个表中存在的另一个表的主键称此表的外键。...第二范式:(确保表中的每列都和主键相关)在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。 第二范式在第一范式的基础之上更进一层。...第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。...第三范式:(确保每列都和主键列直接相关,而不是间接相关) 数据表中的每一列数据都和主键直接相关,而不能间接相关。 第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。...一般来说,应该在这些列上创建索引: (1)在经常需要搜索的列上,可以加快搜索的速度; (2)在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; (3)在经常用在连接的列上,这些列主要是一些外键

    54420

    python数据库-MySQL数据库高级查询操作(51)

    选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。即确定主键,我们可以选取学号为主键 4、接着在考虑第三范式: 确保表中各列与主键列直接相关,而不是间接相关。...不难发现在这么多列中,年龄、住址和成绩、学科没有直接关系,也就是说我考多少分,和年龄及住址都无关,他们都是学生的信息,但都是不相关的信息,所以根据第三范式,我们需要将这些数据根据其相关性拆分为多个表。...指定 存在外键的表,称之为从表(子表),外键指向的表,称之为主表(父表)。...例如,此时在从表插入或者修改数据时,如果stu_id的值在students表中不存在则会报错 外键也可以在创建表时可以直接创建约束 语法: foreign key (外键字段) references...将外键设置为空 no action:什么都不做 四、链接查询 在讲解第一个问题关系的时候,我们提到了,如果要查找张三的语文成绩,需要用到三个表,当我们查询结果来源于多张表的时候就需要使用连接查询 链接查询关键

    3K20

    YashanDB数据完整性

    # 外键约束当两个表拥有一个或多个公共列时,YashanDB可以通过创建一个外键约束来建立这两个表之间的关联关系。...术语定义外键/复合外键约束定义中包含的列称为外键,一个外键由多个列组成时称为复合外键。外键会引用另一个表的主键或唯一键,复合外键则需引用相同数量和数据类型列的复合主键或复合唯一键。...外键的值,要么匹配被引用主键或唯一键的值,要么为空。如果复合外键中存在空值列,该键的非空列不再强制要求匹配父项中的对应列。被引用键被外键所引用的表中的唯一键或主键。...# 父表的修改与外键的关系删除或更新父表数据可能会破坏外键约束。...在父键被修改时,为了满足外键约束,参照完整性约束可以指定在子表中的相关行上,执行以下某种操作之一: NO ACTION 在正常的情况下,如果修改结果会违反外键约束,用户不能做此修改。

    5800

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

    ,…) 2.用修改表的方法也可以添加主键: ALTER TABLE 表名 ADD PRIMARY KEY (字段名) 2.3使用外键: 外键用来在两个数据表之间建立连接,它可以是一列,也可以是多列...KEY (字段1,字段2,字段N) REFERENCES 主表(主键列) 修改表的方式添加外键: ALTER TABLE 子表名 ADD CONSTRAINT 外键名 FOREIGN KEY...(字段) REFERENCES 父表名 (父表主键列) 注意; 1.关联的父表列,一定是父表的主键列 2.关联的父表如果为联合主键是,先关联联合主键中的第一个字段 3.关联父表时,被关联的外键的数据类型要和父表主键的数据类型一致...,否则关联失败 4.关联父表时,父表和子表的存储引擎必须为InnoDB,MyISAM引擎不支持外键功能。...5.要避免书写错误 6.如果两个表之间有外键关联,如果我们想要删除父表,必须先解除外键的关系,或者先删除掉子表, 否则无法删除父表 2.4使用非空约束 非空约束指字段的值不能为空 语法: 在创建表时

    1.2K10
    领券