精华内容
下载资源
问答
  • 外键必须是另一个表主键吗 ?

    千次阅读 2021-05-07 14:13:38
    比如学生在设计的时候一般可以用学号作为主键,也可设计一个ID字段,字段由数据库自动生成且唯一。那么对于班级,一个班级对应多个学生,这个时候对于班级和学生之间的外键就可以用学生的ID做外键。 如下所...

    不一定是主键,但必须是唯一性索引。
    主键约束和唯一性约束都是唯一性索引。
    外键是表间关系的参照,可以不是主键。只是表明两个表之间的关系是通过那个属性连接起来的。

    比如学生表在设计的时候一般可以用学号作为主键,也可设计一个ID字段,字段由数据库自动生成且唯一。那么对于班级,一个班级对应多个学生,这个时候对于班级表和学生表之间的关系,班级表的外键学生ID对应于学生表的学生ID
    如下所示:
    学生(学号,学生ID, 姓名,班级号,成绩)
    班级(班级号,班级名,学生ID)

    展开全文
  • 外键必须是另一个表主键

    万次阅读 多人点赞 2015-12-30 16:16:46
    不一定是主键,但必须是唯一性索引。 主键约束和唯一性约束都是唯一...外键 (FK) 是用于建立和加强两个表数据之间的链接的列或多列。当创建或修改时可通过定义 FOREIGN KEY 约束来创建外键。 在外键引用中,

    不一定是主键,但必须是唯一性索引。

    主键约束和唯一性约束都是唯一性索引。



    FOREIGN KEY 约束

    SQL Server 2008

    外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义 FOREIGN KEY 约束来创建外键。

    在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这个列就成为第二个表的外键。

    例如,因为销售订单和销售人员之间存在一种逻辑关系,所以 AdventureWorks 数据库中的 Sales.SalesOrderHeader 表含有一个指向Sales.SalesPerson 表的链接。SalesOrderHeader 表中的 SalesPersonID 列与 SalesPerson 表中的主键列相对应。SalesOrderHeader 表中的SalesPersonID 列是指向 SalesPerson 表的外键。

    SalesOrderHeader.SalesPersonID 为外键。

    FOREIGN KEY 约束并不仅仅可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束可以包含空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过组成 FOREIGN KEY 约束的所有值的验证。若要确保验证了组合 FOREIGN KEY 约束的所有值,请将所有参与列指定为 NOT NULL。

    注意 注意

    FOREIGN KEY 约束可以引用同一数据库的表中的列或同一表中的列。这些称为“自引用”表。例如,请考虑包含三列的一个雇员表:employee_numberemployee_name 和 manager_employee_number。由于经理本身也是雇员,所以从manager_employee_number 列到 employee_number 列存在外键关系。

    尽管 FOREIGN KEY 约束的主要目的是控制可以存储在外键表中的数据,但它还可以控制对主键表中数据的更改。例如,如果在 Sales.SalesPerson表中删除一个销售人员行,而这个销售人员的 ID 由 Sales.SalesOrderHeader 表中的销售订单使用,则这两个表之间关联的完整性将被破坏;SalesOrderHeader 表中删除的销售人员的销售订单因为与 SalesPerson 表中的数据没有链接而变得孤立了。

    FOREIGN KEY 约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改将无法实现,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的 FOREIGN KEY 约束中的值相对应,则该操作将失败。若要成功更改或删除 FOREIGN KEY 约束的行,必须先在外键表中删除或更改外键数据,这将把外键链接到不同的主键数据上去。

    由于以下原因,对外键创建索引通常是有用的:

    • 对 PRIMARY KEY 约束的更改可由相关表中的 FOREIGN KEY 约束检查。

    • 当在查询中组合相关表中的数据时,经常在联接条件中使用外键列,方法是将一个表的 FOREIGN KEY 约束中的列与另一个表中的主键列或唯一键列匹配。索引使 数据库引擎可以在外键表中快速查找相关数据。但是,创建此索引并不是必需的。即使没有对两个相关表定义 PRIMARY KEY 或 FOREIGN KEY 约束,也可以对来自这两个表中的数据进行组合,但两个表间的外键关系说明已用其键作为条件对其进行了优化,以便组合到查询中。有关在联接中使用 FOREIGN KEY 约束的详细信息,请参阅联接基础知识查询类型和索引

    SQL Server 对一个表可以包含的 FOREIGN KEY 约束(引用其他表)数没有预定义限制,对引用特定表的其他表所拥有的 FOREIGN KEY 约束数也没有预定义的限制。但是,实际的 FOREIGN KEY 约束数会受到硬件配置以及数据库和应用程序的设计的限制。建议表中包含的 FOREIGN KEY 约束不要超过 253 个,并且引用该表的 FOREIGN KEY 约束也不要超过 253 个。在设计数据库和应用程序时应考虑强制 FOREIGN KEY 约束的开销。

    展开全文
  • 一个表的外键关联到主主键约束或者unique约束都可以,不一定非要主键约束追问:也就是意思是只要能唯一标识一张中数据,就可以做外键?追答:嗯,但是不能是数据上控制的,必须要有两个约束之一才行
    一个表的外键关联到主表的主键约束或者unique约束都可以,不一定非要主键约束
    追问:
    也就是意思是只要能唯一标识一张表中数据,就可以做外键?
    追答:
    嗯,但是不能是数据上控制的,必须要有两个约束之一才行
    展开全文
  • 一张可以有多少个主键

    万次阅读 多人点赞 2015-10-21 10:20:28
    1、数据库的每张只能有一个主键,不可能有多个主键。 2、所谓的一张多个主键,我们称之为联合主键。  注:联合主键:就是用多个字段一起作为一张主键。 3、主键主键的作用是保证数据的唯一性和完整性...

    今天在共工作,做老项目维护的时候无意中发现一张表居然有三个主键。吓死宝宝了,然后尝试着建表建主键,但是都不能成功。疑问

    难道是我写的有问题,最后通过查资料总终于解决了。

    1、数据库的每张表只能有一个主键,不可能有多个主键。

    2、所谓的一张表多个主键,我们称之为联合主键。

         注:联合主键:就是用多个字段一起作为一张表的主键。

    3、主键的主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。


    下面聊聊怎么创建联合主键:


    1、GUI中同时选中多列,点击设置为主键

    2、sql语句将多列设置为主键:

     一种是在建表时就写出,语句如下:

    Create Table 表名 (字段名1 Int Not Null,
                       字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),
                        字段名3…………
                        字段名N………… )

    另一种是在建表后更改,语句如下:

    ALTER TABLE 表名 WITH NOCHECK ADD 
    CONSTRAINT [PK_表名] PRIMARY KEY  NONCLUSTERED 
    (
      [字段名1],
      [字段名2]
    )
     
    
    通过以上两种方式就解决了联合主键的问题。



    展开全文
  • 使用jpa往表里添加数据,但是这个没有主键,实体类里随便给一个属性加上@id注解,会不会报错?
  • MySQL必须有主键吗?

    千次阅读 2020-11-04 19:06:27
    因为聚集索引决定了中数据的物理存储顺序,那么一个表则有且只有一个聚集索引。一个聚集索引可以包含多个列。好比一个电话本是基于名字,姓氏同时排序。 I nnodb选择一个聚集索引的过程 对于Innodb,主键
  • 如何设置多个主键
  • 使用sqlalchemy获取到的结果只包含...以及如何获取某张表的主键呢? from sqlalchemy.ext.automap import automap_base from sqlalchemy.orm import sessionmaker from sqlalchemy import MetaData, inspect, creat...
  • SQL--当一张的两外键指向同一主键

    万次阅读 热门讨论 2017-11-26 18:54:54
    最近遇到了这样一个问题,当一张中有两个外键同时执行了另外一种主键,如何建立一张视图,让这两个外键都找到相应的信息。来实例吧:第一张表,归还记录:第二张表,用户:问题就是,归还记录表里有两个字段,...
  • 因为主键起始从实现角度来看是一个 唯一 非空 聚类索引, 聚类索引在一个表只有一个,所以主键只有一个。至于为什么聚类索引在一个表只有一个是因为聚类索引的数据物理顺序和索引排序方式一致,而物理存储...
  • 现在有2个表部分学校和学校 其中部分学校在A库、学校在B库 SCH_ID为关联主键 部分学校 AUTO_ID USER_ID COTY_NO SCH_ID SCH_NO SCH_NAME 1 17 123 341289001 1 职业学院 学校 SCH_ID SCH_NO SCH_...
  • MySQL索引之主键索引

    2020-12-15 16:43:01
    一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。 在MySQL中,InnoDB数据主键设计我们通常遵循几个原则: 1、采用一个没有业务用途的自增属性列作为主键; 2、主键字段值总是不更新,只有...
  • sqlserver设置两及两以上主键

    万次阅读 多人点赞 2018-10-14 17:34:13
    首先要明确主键只有一个,但是我们可以设置主键组来设置主键。这样两个列就都是主键了。设置方法: 利用图形界面操作 选中方法。按住shift,再点击你要选中的列就ok了。 利用SQL语句 alter table tablename ...
  •  每个了解数据库设计的人都知道,主键对于一张来说是一个很重要,甚至必需的部分。这确实是事实,主键是好的数据库设计的一部分。主键是数据库确保数据行在整张唯一性的保障。它是定位到一条记录并且确保不会...
  • 情况:如果中间仅仅是做关联用的,它里面仅有2外键做联合主键,则使用ManyToMany(不用写中间的Model,只需要写出两张主的model即可) 学生 @Entity @Table(name = "T_STUDENT") @Sequence...
  • 表一t_class: CREATE TABLE `t_class` (  `id` int(20) NOT NULL,  `ClassName` varchar(20) DEFAULT NULL,  `GradeID` int(11) DEFAULT NULL,  `ClassDesc` varchar(20) DEFAULT NULL,  PRIMARY KEY (`...
  • 主键表和外键的关系

    千次阅读 2017-07-19 18:02:32
    时候就说user是外键,message主键表。 删除的时候一定要先外键(user),在删除主键表(message) 添加数据则相反,先添加主键表,再添加外键。(或者是外键的数据添加主键表中有的
  • 主键和索引

    千次阅读 2018-08-17 12:40:03
    主键是啥 唯一标识条记录,不能有重复的,不允许为空。 索引是啥 索引就像书的目录, 通过书的目录就准确的定位到了书籍具体的内容 这句话描述的非常正确, 但说了跟没说一样,所以还是要看原理。想要理解...
  • Computer System Add comments 2010年5月6日更新: 只有真正懂得了这个道理的人, 才算真正理解了...在数据库设计中, 每一个表都应该有一个字段作为主键. 这个字段一般是自增整数字段, 或者某些数据库支持的自动
  • MySQL 面试题

    万次阅读 多人点赞 2019-09-02 16:03:33
    当年,我们记着几一定要掌握的重心: 重点的题目添加了【重点】前缀。 索引。 锁。 事务和隔离级别。 因为 MySQL 还会有部分内容和运维相关度比较高,所以本文我们分成两部分【开发】【运维】两部分。 对于...
  • MySQL有许多主键生成策略,其中很常见的种是自动生成。一般情况下,主键类型是BIGINT ...往目标插入条数据之间,JPA实现者从生成器选择条关于目标主键记录,该记录保存目标主键。JPA实现者增大该
  • 在网上搜的资料说Oracle数据索引查询的时候先查索引然后根据索引确定主键值再通过主键查询数据,那如果该没有主键只有索引,那索引是怎么查到数据的呢
  • 分区表主键

    千次阅读 2017-03-31 16:43:48
    如题,现有分区,除主键索引外其余索引均为分区索引,疑问如下: 1、现在有dba指出修改计划将表主键的全局索引修改为分区索引,不知道修改后能不能够起到优化的作用?? 2、分区索引对主键中的数据一致性有...
  • mappedBy和JoinColumn实质上指向的是同一个表即外键作为主键所在的对应的实体(其对应对象1) mappedBy对应实体的声明对象1 JoinColumn对应的是对象1的主键 比如: 花朵类{ 花朵类名 ...
  • FAS_BILL_INFO主键为BILL_CODE,新生成一个new_bill_code,把old_bill_code对应的全部复制到新生成new_bill_code的记录中; declare  old_bill_code varchar2(44); --旧借据号 旧主键  new_bill_code varchar...
  • MySQL InnoDB数据缺少主键会怎样

    千次阅读 2020-03-26 17:58:15
    MySQL数据使用InnoDB作为存储引擎的时候,数据结构就是使用B+树,而的所有数据存储在主键索引上,也就是通常所说的聚簇索引,也就是每个表都需要有聚簇索引树,对于InnoDB,主键对应的索引就是聚簇索引,的...
  • SQL岗位30面试题,SQL面试问题及答案

    万次阅读 多人点赞 2019-06-19 17:42:34
    SQL岗位30面试题,SQL面试问题及答案: 什么是SQL? SQL(结构化查询语言)是种设计用于检索和操作数据的数据库。它属于美国国家标准协会(ANSI)的种标准,可用于执行Select(选择)、Update(更新)、...
  • 主键&之间的关系(外键)

    千次阅读 2020-06-19 19:52:14
    直接代表字段为not null,不许重复,且一个表只有一个主键。 primary key 相当于在各个组成主键的字段上加上not null约束,再以所有主键字段组合在一起加unique约束。 并且建立主键将自动添加一个Bi_tree索引。(因为...
  • 一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。 在MySQL中,InnoDB数据主键设计我们通常遵循几个原则: 采用一个没有业务用途的自增属性列作为主键主键字段值总是不更新,只有新增或者...
  • 本文主要从使用角度来介绍关于CH的分布式,ttl,主键等信息。 分布式 分布式种逻辑上的,并不真正存储数据。查询时,请求直接下发分布式,分布式会下发到各个子进行查询,之后结果进行汇总、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 198,165
精华内容 79,266
关键字:

一个表只有一个主键吗