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

主键和外键的索引

主键和外键是关系型数据库中的两个重要概念,用于建立表与表之间的关联关系。

  1. 主键(Primary Key): 主键是用于唯一标识表中每一条记录的字段或字段组合。主键具有以下特点:
  2. 唯一性:主键值在表中是唯一的,不允许重复。
  3. 非空性:主键值不能为空,即每条记录都必须有主键值。
  4. 不可更改性:主键值一旦确定,就不能再被修改。

主键的作用:

  • 唯一标识记录:通过主键可以唯一标识表中的每一条记录。
  • 约束数据完整性:主键的唯一性和非空性约束了数据的完整性,防止数据重复或缺失。
  • 建立表与表之间的关联关系:主键可以作为外键在其他表中建立关联。

推荐的腾讯云相关产品:腾讯云数据库 MySQL、腾讯云数据库 MariaDB、腾讯云数据库 PostgreSQL、腾讯云数据库 TDSQL-C。

  1. 外键(Foreign Key): 外键是用于建立表与表之间关联关系的字段。外键具有以下特点:
  2. 引用主键:外键引用了其他表的主键,建立了表与表之间的关联。
  3. 可以为空:外键可以为空,表示该记录与其他表中的记录没有关联。
  4. 可重复:外键可以重复,即多条记录可以引用同一个主键。

外键的作用:

  • 建立表与表之间的关联关系:通过外键可以建立表与表之间的关联,实现数据的一致性和完整性。
  • 维护数据的一致性:外键可以保证相关表中的数据一致性,防止数据冗余和不一致。

推荐的腾讯云相关产品:腾讯云数据库 MySQL、腾讯云数据库 MariaDB、腾讯云数据库 PostgreSQL、腾讯云数据库 TDSQL-C。

参考链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

数据库之主键索引

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

84120

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

参考文章: Mysql 索引详解优化 数据库原理-几种数据模型 Mysql中keyindex区别 (讲很合理) 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

数据库主键

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

2.3K20

主、约束_创建主键约束

主、约束 点关注不迷路,欢迎再来! 精简博客内容,尽量已专业术语来分享。 努力做到对每一位认可自己读者负责。 帮助别人同时更是丰富自己良机。...主键是两种类型约束; 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

1.9K20

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

例如有两个表      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表。...二、主键索引区别 定义: 主键--唯一标识一条记录,不能有重复,不允许为空 --表是另一表主键可以有重复, 可以是空值 索引--该字段没有重复值,但可以有一个空值...作用: 主键--用来保证数据完整性 --用来其他表建立联系用 索引--是提高查询排序速度 个数: 主键--主键只能有一个 --一个表可以有多个 索引--一个表可以有多个唯一索引

5.5K21

要建立索引原理实验

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

2.5K20

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、对于子表不存在索引情形,对于主表上主键更新以及删除主表中一行都将导致整个子表被锁住

62320

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.7K10

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

、候选主键

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

94930

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

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

1.1K20

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

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

86430

InnoDB主键索引二级索引

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

15120

MyISAM主键索引二级索引

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

16220

设置

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

2.7K30

mysql

在MySQL 3.23.44版本后,InnoDB引擎类型表支持了约束。...使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持(据说以后版本有可能支持,但至少目前不支持); 2.列必须建立了索引,MySQL 4.1.2以后版本在建立时会自动创建索引...,但如果在较早版本则需要显示建立; 3.关系两个表列必须是数据类型相似,也就是可以相互转换类型列,比如inttinyint可以,而intchar则不可以; 好处:可以使得两张表关联...,保证数据一致性实现一些级联操作; 定义语法: [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)...ON DELETE、ON UPDATE表示事件触发限制,可设参数: RESTRICT(限制外表中改动) CASCADE(跟随改动) SET NULL(设空值) SET DEFAULT(设默认值

5.4K70

mysql 唯一索引_mysql主键唯一索引区别

主键索引(PRIMARY):它 是一种特殊唯一索引,不允许有空值。...全文索引(FULLTEXT ):可用于 MyISAM 表,mysql5.6之后也可用于innodb表, 用于在一篇文章中,检索文本信息, 针对较大数据,生成全文索引很耗时空间。...之前我们看了主键索引,他是一种特殊唯一索引,二者区别是,主键索引不能有空值,但是唯一索引可以有空值。...,经常导致慢查询,耗时2秒左右,遇忙时更有达到5秒 改用unique之后,查询耗时在0.0003秒 基本可以忽略不计 三:唯一索引主键索引具体区别 1:唯一性约束所在列允许空值,但是主键约束所在列不允许空值...4:建立主键目的是让来引用. 5: 一个表最多只有一个主键,但可以有很多唯一 四:存在唯一冲突时,避免策略 1:使用insert ignore语句 insert ignore会忽略数据库中已经存在数据

2.6K30

唯一索引主键索引比较

该列称为表主键。 在数据库关系图中为表定义一个主键将自动创建主键索引主键索引是唯一索引特殊类型。主键索引要求主键每个值是唯一。当在查询中使用主键索引时,它还允许快速访问数据。...; 3主健可作健,唯一索引不可; 4主健不可为空,唯一索引可; 5主健也可是多个字段组合; 6主键与唯一索引不同是: (1).有not null属性; (2).每个表只能有一个。...索引注意事项 1.组合或者引用关系子表(数据量较大时候),需要在关联主表列上建立非聚集索引(如订单明细表中产品ID字段、订单明细表中关联订单ID字段) 2.索引大小不能超过900个字节,...3.表中如果建有大量索引将会影响INSERT、UPDATEDELETE语句性能,因为在表中数据更改时,所有的索引都将必须进行适当调整。...还有需要关注Order ByGroup By谓词索引设计,Order ByGroup By谓词是需要排序,某些情况下为Order ByGroup By谓词建立索引,会避免查询时排序动作。

3K110
领券