主键 外键 索引 为什么主键只有一个 主键与索引是什么关系
发布网友
发布时间:2022-04-10 07:35
我来回答
共2个回答
热心网友
时间:2022-04-10 09:04
主键:保证数据完整唯一性。外键:是关联另外一个表主键的一个键,保证两个表之间的关联性索引:加快搜索效率首先主键和索引从目的上来讲不是一个概念,主键是为了保证数据唯一性,索引是为了加快检索速度。但是,从实现方式上主键主键却达到了唯一 非空聚类索引的效果。所以1. 从实现目的来看(约束)主键约束=唯一非空 约束2. 从实现效果来看主键 = 唯一外键(Foreign Key) 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。 外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有客户号,客户名称 b表中存有每个客户的订单 有了外键后 你只能在确信b 表中没有客户x的订单后,才可以在a表中删除客户x 建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键表名(外键列名) 事件触发*: on delete和on update , 可设参数cascade(跟随外键改动), restrict(*外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action 例如: outTable表 主键 id 类型 int 创建含有外键的表: create table temp( id int, name char(20), foreign key(id) references outTable(id) on delete cascade on update cascade); 说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。 建键几个原则: 1、 为关联字段创建外键。 2、 所有的键都必须唯一。 3、避免使用复合键。 4、外键总是关联唯一的键字段。
热心网友
时间:2022-04-10 10:22
主键没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为“PRIMARY KEY”,主键不能重复,一个表只能有一个主键。
1、声明主键的方法:
您可以在创建表的时候就为表加上主键,如:
CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));
也可以更新表结构时为表加上主键,如:
ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name,…);
/*
创建一个qq表,将qq_id设为主键,且没有对其进行NOT NULl约束
*/
create table qq(
qq_id int(10),
nick_name varchar(255) not null,
primary key (qq_id))
/*
插入一条数据,将qq号设为10000(咱也幻想一下),昵称设为"simaopig"
*/
INSERT INTO qq( qq_id, nick_name )
VALUES (
'10000', 'simaopig');
2、示例
主键被认为是NOT NULL和UNIQUE约束最好的结合。如果这些列没有被明确地定义为NOT NULL,MySQL会隐含地定义这些列。
3、主键也是索引:
刚才已经说了,主键其实也是索引,甚至在MySQL的术语里面“键”就等于“索引”,所以“外键”一定要先设为“索引”。所以主键也应该和索引一样,既可以作用于单独的字段,又可以作用于多个字段。
举个简的例子吧,我住3单元,501室,我叫小小子,那么只有3单元501室才能在本小区表里面唯一确定我家。因为2单元,501室住着的可能也是个小小子,所以只有两个字段才能唯一确定我,也就是说可以二者组合作为主键。组合的主键,每个列都会隐含定义NOT NULL约束,且其二者加在一起被定义了UNIQUE 惟一约束。
/*
创建防火墙表,将host 和port组合设为主键,注意我没有将port设NOT NULL约束
*/
create table firewall(
host varchar(11) not null,
port smallint(4),
access enum('deny', 'allow') not null,
primary key (host,port))
/*
插入一条新的记录,没有啥问题
1 row(s) inserted.
*/
INSERT INTO firewall (
host ,
port ,
access)
VALUES (
'202.65.3.87', '21', 'deny');
主键 外键 索引 为什么主键只有一个 主键与索引是什么关系
主键:保证数据完整唯一性。外键:是关联另外一个表主键的一个键,保证两个表之间的关联性索引:加快搜索效率首先主键和索引从目的上来讲不是一个概念,主键是为了保证数据唯一性,索引是为了加快检索速度。但是,从实现方式上主键主键却达到了唯一 非空聚类索引的效果。所以1. 从实现目的来看(约束)主键...
数据库的几个概念:主键,外键,索引,唯一索引
主键: 主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如:id int(10) not null primary key auto_increment 主键: 主键是数据表的唯一索引,比如学生表里有学号和姓名,...
数据库之主键、外键、索引
外键则是当我们要在不同的房子(表)之间建立关联关系时,会用到的一个概念。想象一下,如果你想了解住在相邻房子的邻居信息,你可能会找一个大家都信任的人作为联系人,这个人就像是外键,它在两个表之间建立了一个桥梁,确保了关联关系的正确性和约束性。索引就像是小区保安手上的住户和房子联系表,...
关于一个表只能有一个主键的问题
外键、索引……是不是混淆了呢?主键的作用实际上等同于聚簇索引,它们都是将某字段(或某些字段)标记为该表唯一不可重复的(即唯一性)。另外,你所说的“2个或者更多”是不是被定义为某个主键的字段有很多呢?(难理解我生涩的话,就看下面的例子)有的表里,主键是建立在一个字段上,有的则...
数据库中主键和索引的区别以及使用场景分别是什么?
1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性...
SQL数据库中的主键与外键介绍
一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 :学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键用户表(用户名、密码、登录级别)其中用户名是唯一的, 用户名就是一个主键上机记录表...
SQL SERVER中,主外键关系是怎么回事?
主键、外键和索引的区别 定义:主键--唯一标识一条记录,不能有重复的,不允许为空 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值 作用:主键--用来保证数据完整性 外键--用来和其他表建立联系用的 个数:主键--主键只能有一个 外键--一个表可以有多个外键 SQL的主键和外键的...
主键、外键和索引的区别?
外键,外键是依存于主键存在的,没有主键也就没有外键。外键是两张表建立的一种约束与联系,是“强制约束”,类似于“A表有B表才能有,A表没有B表不能有”。外键更多的偏向于约束,并不是索引(个人理解)至于索引的概念那就多了,有约束(比如非空就是一种约束,但是在某些数据库上将这类约束也...
如何深刻理解主键,外键,索引?
主键是数据库物理模式的基石,具有以下两个主要功能:1. 确保每一行的唯一标识。2. 作为外键的有效引用目标。设计物理层主键时,应遵循以下原则:1. 避免主键具有实际意义,确保其功能仅限于标识唯一行。2. 主键应为单一列,以提高连接和筛选操作的效率。3. 避免更新主键,除非设计允许主键无意义。4....
一张表允许有多个主键,但只能有一个外键
主键的一个重要特性是它可以被其他表引用为外键。这意味着如果一个表的某个列被定义为主键,那么其他表可以通过外键关联到这个列,从而实现表之间的关联和数据关系。相反,唯一索引列不能被用作外键。这是因为外键通常需要强制执行数据的一致性和完整性,而唯一索引列允许空值,这可能导致关联失效。主键和...