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

数据库之主键、外键、索引

读者提问: 想问下数据库中主键、外键、索引分别指的是什么?能用通俗一点的话解答下么?...阿常回答: 我们可以把数据库比做一个小区, 我们每个人就是具体的“数据”, 我们的每个家就是一张表, 每个家都会有一个唯一的门牌号,这就是主键。...那什么是外键呢, 就是当你想和其它房间的人建立关联关系时, 会找一个双方都认可的人,做为联系人, 这个人就是外键,他会有一些约束。...而索引就是别人为了快速找到你, 会先去问下小区的保安, 他那边会有一个全小区的住户和房子的联系表, 这样你就不用一家家的去敲门了。...阿常碎碎念: 以上问答首发于知识星球「软件测试圈」,源于@小布丁向阿常的提问。 看完今天的分享对你是不是有所启发呢,有任何想法都欢迎大家后台私信阿常,一起探讨交流

88320

mysql 索引 键 主键 外键等概念彻底理清楚

参考文章: Mysql 索引详解和优化 数据库原理-几种数据模型 Mysql中的key和index的区别 (讲的很合理) Mysql中的Cascade,NO ACTION,Restrict...特例:子表(外键所在表)的外键可以为NULL,前面的规律作废(与主表引用列无关)。...5、主表的 约束键 叫:引用列、子表的约束键 叫:外键 6、Mysql中key 、primary key 、unique key 与index区别:前面三个是用户级别的概念,包含constraint、...联合主键就是用多个字段一起作为一张表的主键。主键的主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。 唯一性:列可以不唯一,但联合起来必须唯一。...2、 存在歧义的概念: key 和 索引index 1、索引—在SQL语句里叫 key 错综复杂的关系: 1、primary key 与 外键 一图理解: ?

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

    数据库主键和外键

    主键、外键和索引的区别?...主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 该字段没有重复值,但可以有一个空值 作用: 用来保证数据完整性 用来和其他表建立联系用的...是提高查询排序的速度 个数: 主键只能有一个 一个表可以有多个外键 一个表可以有多个惟一索引 聚集索引和非聚集索引的区别?...Mysql和Oracle创建主键: 1、MySQL create table user_test (id int auto_increment primary key not null,...POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.

    2.4K20

    软考高级:超键、候选键、主键、外键概念和例题

    一、AI 讲解 超键、候选键、主键和外键是数据库设计中的重要概念,它们在保证数据的一致性、完整性和避免数据冗余方面发挥着重要作用。下面将逐一解释这些概念,并给出相应的例子。...例子:在上述的学生信息表中,如果我们选择学号作为主键,那么每个学生的学号都必须是唯一的。 外键(Foreign Key) 外键是一个表中的字段,它是另一个表的主键。...外键用于建立两个表之间的关联,确保引用的数据的完整性。 例子:假设有一个课程表,其中包含课程ID和课程名称,以及一个选课表,包含学号和课程ID。...这里的课程ID在选课表中就是一个外键,它引用了课程表中的主键。 接下来,我将根据这些概念出 6 道相关的选择题,并在最后给出答案和详细讲解。...选择主键时考虑的是唯一性、稳定性和简洁性,颜色与主键的选择无关。 答案:B. 建立表之间的逻辑关系。外键用于建立两个表之间的关系,保证引用的数据的完整性。 答案:D. 外键。

    28200

    主、外键约束_创建主键约束

    主、外键约束 点关注不迷路,欢迎再来! 精简博客内容,尽量已专业术语来分享。 努力做到对每一位认可自己的读者负责。 帮助别人的同时更是丰富自己的良机。...主键和外键是两种类型的约束; 1.主键是能唯一的标识表中的每一行,就是说这一列非空且值不重复,可以指定为主键;作用是用来强制约束表中的每一行数据的唯一性; 2.外键是b表中的某一列引用的值来源于a表中的主键列...也是约束b表中的外键列的值必须取致a表中的主键列值,不是其中的值就不能插入b表中。可以形成a表b表的联系,保持数据的约束和关联性。...创建主表主键: CREATE table dept ( deptno NUMBER(11) PARIMARY KEY, dname VARCHAR2(14) not null, loc...VARCHAR2(13) ); 创建副表及外键: CREATE table emp( empno NUMBER(4,0) PRIMARY KEY, ename VARCHAR2

    2K20

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

    例如有两个表      A(a,b)   :a为主键,b为外键(来自于B.b)      B(b,c,d)   :b为主键       如果我把字段b的外键属性去掉,对编程没什么影响。  ...http://www.cnblogs.com/ywb-lv/archive/2012/03/12/2391860.html 定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 一、主键是能确定一条记录的唯一标识...比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。...二、主键、外键和索引的区别 定义: 主键--唯一标识一条记录,不能有重复的,不允许为空 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引--该字段没有重复值,但可以有一个空值...作用: 主键--用来保证数据完整性 外键--用来和其他表建立联系用的 索引--是提高查询排序的速度 个数: 主键--主键只能有一个 外键--一个表可以有多个外键 索引--一个表可以有多个唯一索引

    6K21

    外键要建立索引的原理和实验

    但发现有时开发人员提交SQL语句时未必会注意外键列需要定义索引,或者不清楚为什么外键列需要建立索引,网上一些所谓的“宝典”也会将外键列建索引作为其中的一条,包括TOM大师,曾说过: 导致死锁的头号原因是外键未加索引...在以下两种情况下,Oracle在修改父表后会对子表加一个全表锁: 1)如果更新了父表的主键(倘若遵循关系数据库的原则,即主键应当是不可变的,这种情况就很少见),由于外键上没有索引,所以子表会被锁住。...按照官方文档的说明, 只有当唯一键或主键不被更新或删除的情况下,才不需要为外键创建索引。...当满足以下两个条件时,会获取子表的表锁: (1) 子表外键不存在索引。 (2) 修改主表的主键(例如,删除一行记录或者修改主键值)或者合并主表的多行记录。..._id列是外键,参考t1表的id主键列。

    2.7K20

    Oracle 索引监控与外键索引

    而在11g则不会出现类型的情形。其次对于存在子表存在外键的情形,对于主表进行操作时是否会导致索引被监控呢?下面描述的是这个话题。...--基于外键创建索引 SQL> create index i_ctb_fk_deptno on ctb(deptno) nologging; Index created....--删除外键上的索引 SQL> drop index i_ctb_fk_deptno; Index dropped....,如果子表上存在外键约束且存在外键索引,对于主表得DML操作不会使得子表索引被使用     b、尽管子表索引不会由于主表DML操作被监控到,但如果子表外键索引不存在,主表上的DML会产生更多的一致读(相对外键索引存在...)     c、由上可知,对于外键索引未被监控到的情形,不可盲目的认为该索引无效而删除     d、对于子表不存在索引的情形,对于主表上的主键的更新以及删除主表中的一行都将导致整个子表被锁住

    65020

    oracle删除主键索引的sql语句_oracle主键索引和普通索引

    --根据索引名,查询表索引字段 select * from user_ind_columns where index_name='索引名'; --根据表名,查询一张表的索引 select * from...'; 一.oracle 表加索引 首先,查看目前已经建立的索引 select index_name from all_indexes where table_name = 'table1'; 2.接着,...for enforcement of unique /primary key 这个错误,对应的中文提示“ORA-02429: 无法删除用于强制唯一/主键的索引”,其实从错误提示信息已经很明显了。...下面还是用一个简单的例子述说一下该错误的来龙去脉。 ORA-02429错误的原因是因为用户试图删除一个用于强制唯一/主键的索引,解决方法也很简单,删除对应的约束就会自动删除该索引。...&设置某一字段可以为null 1.oracle主键修改 1.1)首先查看需要修改的表的主键名,默认的情况下,数据库会自动分配 select * from user_cons_columns where

    3.9K10

    MySQL约束:主键、非空、唯一、外键 ️

    在这篇博客中,我将详细介绍MySQL中各种约束的使用,包括主键约束、非空约束、唯一约束和外键约束。这些约束是保证数据库完整性和数据一致性的关键。...关键词:MySQL约束、主键、非空、唯一、外键、数据库设计。 引言 MySQL约束是数据库设计中至关重要的一部分。通过设置合适的约束,可以有效地防止不合法的数据插入表中,从而保证数据的一致性和完整性。...在这篇文章中,我们将深入探讨MySQL中各种约束的定义和使用方法,并通过具体的代码案例展示如何在实际开发中应用这些约束。 主键约束 什么是主键约束?...A:是的,一个表可以有多个外键,每个外键都指向另一个表中的主键或唯一键。 Q:如果删除一个有外键约束的记录会怎样?...未来展望 未来,我们将探讨更多高级数据库设计技巧和优化方法,包括索引优化、查询优化和数据库性能调优等内容。敬请期待! 参考资料 MySQL官方文档 SQL约束介绍 数据库设计最佳实践

    17110

    oracle建表、建主键、外键基本语法

    主键:唯一标识,不能为空,加快查询速度,自动创建索引 外键:约束内表的数据的更新,从定义外键时可以发现 外键是和主键表联系,数据类型要统一,长度(存储大小)要统一。...这样在更新数据的时候会保持一致性 -创建表格语法: create table 表名( 字段名1 字段类型(长度) 是否为空, 字段名2 字段类型 是否为空...); -增加主键 alter table 表名 add constraint 主键名 primary key (字段名1); -增加外键: alter table 表名...add constraint 外键名 foreign key (字段名1) references 关联表 (字段名2); 在建立表格时就指定主键和外键 create table...varchar2(8) not null, constraint PK_T_STU primary key (STU_ID) ); 主键和外键一起建立

    3.1K50

    超键、候选键和主键

    参考博客 身份证唯一,所以是一个超键 姓名唯一,所以是一个超键 (姓名,性别)唯一,所以是一个超键 (姓名,年龄)唯一,所以是一个超键 (姓名,性别,年龄)唯一,所以是一个超键 这里可以看出,超键的组合是唯一的...,但可能不是最小唯一的 身份证唯一,而且没有多余属性,所以是一个候选键 姓名唯一,而且没有多余属性,所以是一个候选键 虽然(姓名,性别)唯一,但是单独姓名一个属性就能确定这个人是谁,所以性别这个属性就是多余属性...,所以(姓名,性别)不是候选键 姓名,年龄),(姓名,性别,年龄)同上,也不是候选键 这里可以看出,候选键是没有多余属性的超键 考虑输入查询方便性,可以选择 身份证 为主键 也可以 考虑习惯选择...姓名 为主键 主键是选中的一个候选键

    98730

    主键、唯一键与唯一索引的区别

    大家好,又见面了,我是全栈君 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性约束。...索引和键的混淆通常是由于数据库使用索引来实施完整性约束。 接下来我们看看数据库中的主键约束、唯一键约束和唯一索引的区别。...如果我们让主键约束或者唯一键约束失效,Oracle自动创建的唯一索引是否会受到影响? SQL> drop table test purge; Table dropped....如果我们先创建唯一索引,再创建主键或者唯一键约束,情况又会怎样呢? SQL> drop table test purge; Table dropped....总结如下: (1)主键约束和唯一键约束均会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效时,隐式创建的唯一索引会被删除; (2)主键约束要求列值非空,而唯一键约束和唯一索引不要求列值非空; (3)

    1.3K20

    mysql删除主键和删除索引(含删除unique索引)

    mysql删除主键和删除索引(含删除unique索引) ##删除表 DROP TABLE config_back; ##删除主键 ALTER TABLE config_back DROP PRIMARY...: 使用ALTER TABLE语句移除主键约束: ALTER TABLE 表名 DROP PRIMARY KEY; 这种方法适用于需要移除表中已有主键的情况。...使用ALTER TABLE语句修改主键约束: ALTER TABLE 表名 DROP PRIMARY KEY, ADD PRIMARY KEY (列名); 这种方法适用于需要将原来的主键替换为其他列作为新的主键的情况...注意第一行后面的是逗号 ALTER TABLE config_back DROP PRIMARY KEY, ADD PRIMARY KEY (`price_begin`); 使用ALTER TABLE语句移除主键约束并添加新的唯一索引...config_back DROP INDEX `price_end`; 使用ALTER TABLE语句移除主键约束并添加新的普通索引: ALTER TABLE 表名 DROP PRIMARY KEY,

    13410

    【面试系列】主键索引和唯一索引谁更快?

    1、主键和唯一索引的区别 主键一定时唯一性索引,唯一性索引并不一定是主键 一个表中可以有多个唯一性索引,但只能有一个主键 主键不允许有空值,而唯一索引允许有空值 主键可以被其他字段作外键引用,而唯一性索引不能...2、主键 和 唯一索引 谁更快 InnoDB使用B+树作为索引结构。...在B+树中,将节点分为叶子结点和非叶子节点,非叶子节点上保存的是索引,而且一个节点可以保存多个索引,数据全部存于叶子节点上,根据叶子节点的内容不同,InnoDB索引分为主键索引和非主键索引。...例如对于下面这个表,且ID是主键 主键索引和非主键索引的示意图如下: 其中 R 代表一整行的值   非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引...也就是说,非主键索引查询会比主键查询多搜索一棵树。 面试又给我问到MySQL索引【索引的实现原理】 你知道数据库索引的工作原理吗?

    1.6K30

    MyISAM主键索引树和二级索引树

    MyISAM:数据和索引没有放在一块,叫做 非聚集索引,不可能回表 InnoDB:数据和索引存放在一块,叫聚集索引 ,会涉及回表 此时假设一个场景:uid是主键,有主键索引树,name有索引,创建二级索引树...当前场景下的主键索引树如下,B+树非叶子节点上只有索引值,叶子节点上有索引值和数据地址 MyISAM索引树原理图如下: 当前场景下的二级索引树如下: InnoDB二级索引树叶子节点上是主键值uid,...而MyISAM存的则是数据的地址 当前场景下,主键索引树和二级索引树两者之间的联系: 在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的...,而辅助索引的key可以重复,MyISAM二级索引树结构图如下: 当前场景下,若使用MyISAM存储引擎查找数据,以name作为索引,到二级索引树上查找结果(构造索引树的过程也涉及磁盘I/O),如果指定的...MyISAM存储引擎,B+树叶子节点存储关键字和数据地址,也就是说索引关键字和数据没有在一起存放,体现在磁盘上,表的数据存放在*.MYD文件中,表的索引存放在*.MYI文件中。

    24520

    InnoDB主键索引树和二级索引树

    我们这里讨论InnoDB存储引擎,数据和索引存储在同一个文件student.ibd 场景1:主键索引树 uid是主键,其他字段没有添加任何索引 select * from student; 如果是上面这样查询...key是辅助索引字段name的值,然后还有外加uid主键的值 在辅助索引树上,key是辅助索引的值,也就是name;data数据值是所在记录行的主键值(PRIMARY KEY),也就是uid(并不是表的一行数据...; 这种情况select的是name和uid,而这些在二级索引树上也是直接就有,所以搜索二级索引树就完事了。...的所有信息(回表) 而这个回表意味着更多的磁盘I/O,会影响效率,如果业务只需要uid、name,就别写select *了,这样可以避免回表(在二级索引树上查到主键,再去主键索引树上查找) 分析语句4:...分析:既然索引树上只能存自己建立的索引字段以及主键,那我们把需要查询的字段都设置成索引不就好了?

    22720

    外键的设置

    关键词:外键 | 索引 | InNoDB和MyISAM | 引用 | Mysql 设置外键的目的:保证数据的一致性!...一、外键的使用条件: ① 两个表必须是InnoDB表,MyISAM表暂时不支持外键 #查看表类型 SHOW TABLE STATUS #查询结果的Engine字段下,一般默认InnoDB类型 ②...外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立; #创建索引 CREATE INDEX 字段1 ON test(字段1) #对...test2创建test的索引,在test2下执行,test2为从,test为主 这一步也是博主自己刚开始研究是碰到的最大的坑, 外键引用一直选不了对应字段,可能是你没有设置索引 ③ 外键关系的两个表的列必须是数据类型相似...,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以; 二、设置外键 1、SQL代码设置 ALTER TABLE test2 ADD xxx #约束名 自己起

    2.8K30
    领券