关于数据库:主键和唯一键之间的区别

difference between primary key and unique key

我正在使用mysql数据库。 我在主键和唯一键之间存在混淆。

请帮助我在哪里创建主键和唯一键。 我的意思是在哪种情况下我们创建唯一的密钥或主键。


首要的关键:

  • 表中只能有一个主键
  • 在某些DBMS中,它不能是NULL - 例如MySQL添加NOT NULL
  • 主键是记录的唯一键标识符

独特的关键:

  • 一个表中可以有多个唯一键
  • 唯一键可以具有NULL
  • 它可以是候选键
  • 唯一键可以是NULL;多行可以有NULL值,因此可能不被视为"唯一"


唯一键(英国):它是一列或一组列,可以识别连续的唯一性。

主键(PK):它也是一列或一组列,可以标识一行中的唯一性。

因此,主键只是唯一键的另一个名称,但SQL Server中的默认实现对于主键和唯一键是不同的。

默认情况下:

  • PK创建聚簇索引,UK创建非聚集索引。
  • PK不为空,但UK允许空值(注意:默认值)
  • 桌子上只能有一个PK,但可以有多个英国的PK
  • 您可以根据需要覆盖默认实现。
  • 在决定是创建英国还是PK时,这取决于你的目标。它遵循类似的类比
    "如果有一个由三人组成的团队,那么所有人都是同龄人,但其中一人将成为同伴:PK和英国有着相似的关系。"我建议阅读这篇文章:作者给出的例子可能看起来不合适,但试图找到一个整体的想法。

    http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html


    对于组织或企业,有如此多的物理实体(例如人员,资源,机器等)和虚拟实体(他们的任务,交易,活动)。
    通常,业务需要记录和处理这些业务实体的信息。
    这些业务实体通过密钥在整个业务域中标识。

    根据RDBMS预期,Key(a.k.a Candidate Key)是唯一标识实体的值或值集。

    对于数据库表,存在许多密钥,并且可能符合主键的条件。
    因此,所有密钥,主密钥,唯一密钥等统称为候选密钥。
    但是,DBA从候选键中选择一个用于搜索记录的键称为主键。

    主键和唯一键之间的区别

    1.行为:主键用于标识表中的行(记录),而唯一键用于防止列中的重复值(空条目除外)。

    2.索引:默认情况下,SQL-engine在主键上创建聚簇索引(如果不存在),在Unique-key上创建非聚簇索引。

    3.可为空性:主键不包括空值,而唯一键可以。

    4.存在:一个表最多只能有一个主键,但可以有多个唯一键。

    5.可修改性:您不能更改或删除主值,但唯一键值可以。

    有关更多信息和示例:

    http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html


    主键必须是唯一的。

    唯一键不必是主键 - 请参阅候选键。

    也就是说,表上可能有多个列的组合可以唯一地标识行 - 只能选择其中一个作为主键。其他人虽然是唯一的候选钥匙。


    主键具有标识数据库行的语义。因此,给定表只能有一个主键,而可以有许多唯一键。

    同样出于同样的原因,主键不能为NULL(至少在Oracle中,不确定其他数据库)

    因为它标识了它永远不会改变的行。改变主键必然会造成严重的痛苦,并可能导致永久的诅咒。

    因此,在大多数情况下,您需要一些主键的人工ID,除了识别表中的单个行之外,它不用于任何内容。

    另一方面,唯一键可能会根据需要进行更改。


    Difference between Primary Key and Unique Key

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    +-----------------------------------------+-----------------------------------------------+
    |                Primary Key              |                    Unique Key                 |
    +-----------------------------------------+-----------------------------------------------+
    | Primary Key can't accept null values.   | Unique key can accept only one null value.    |
    +-----------------------------------------+-----------------------------------------------+
    | By default, Primary key is clustered    | By default, Unique key is a unique            |
    | index and data in the database table is | non-clustered index.                          |
    | physically organized in the sequence of |                                               |
    | clustered index.                        |                                               |
    +-----------------------------------------+-----------------------------------------------+
    | We can have only one Primary key in a   | We can have more than one unique key in a     |
    | table.                                  | table.                                        |
    +-----------------------------------------+-----------------------------------------------+
    | Primary key can be made foreign key     | In SQL Server, Unique key can be made foreign |
    | into another table.                     | key into another table.                       |
    +-----------------------------------------+-----------------------------------------------+

    您可以从以下位置找到详细信息
    http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-between-Primary-Key-and-Unique-Key.html


    主键是唯一键。

    每个表必须至多有一个主键,但它可以有多个唯一键。主键用于唯一标识表行。主键不能是NULL,因为NULL不是值。


    • 认为表名是雇员。
    • 首要的关键
    • 主键不能接受空值。主键强制执行a的唯一性
      柱。我们在表中只能有一个主键。
    • 独特的钥匙
    • 唯一键可以接受空值。唯一键还强制执行列的唯一性。您可以认为唯一键是否包含空值,那么为什么它可以是唯一的?是的,虽然它可以接受空值,但它强制实现列的唯一性。只需查看图片。其中Emp_ID是主要的,Citizen ID是唯一的。希望你能理解。我们可以在表中使用多个唯一键。
      enter image description here


    我知道这个问题已有几年了,但我想提供一个答案,解释为什么而不是如何

    主键的用途:唯一地标识数据库中的行=>行表示由表建模的实体类型的单个实例。主键强制实体的完整性,即AKA实体完整性。主键是聚簇索引,即它定义数据物理存储在表中的顺序。

    唯一键的目的:好的,使用主键我们可以唯一地标识一行。但我有一个业务需求,即另一列/一组列应具有唯一值。从技术上讲,鉴于此列是唯一的,它可以成为强制实体完整性的候选者。但是就我们所知,本专栏可以包含来自外部组织的数据,我可能对其独特性存在疑问。我可能不相信它提供实体完整性。我只是将它作为满足我业务需求的独特密钥。

    你去!


    如果您的数据库设计不需要外键,那么您可以使用Unique键(但请记住唯一键允许单个空值)。

    如果您的数据库需要外键,那么您无需选择就必须使用主键。

    要查看唯一键和主键之间的区别,请访问此处


    主键的主要功能是:

    它必须包含每行数据的唯一值。
    它不能包含空值。
    表中只有一个主键。

    Unique键的主要功能包括:

    它还可以包含每行数据的唯一值。

    它还可以包含空值。

    表中的多个唯一键。


    主键和唯一键之间的区别

    Primary keyUnique Key都用于唯一定义表中的行。
    Primary key创建列的clustered index,而Unique creates an unclustered index of the column

    A Primary Key不允许NULL value,但a Unique Key允许one NULL value


    主键

    主键的主要目的是提供一种识别表中每条记录的方法。

    主键提供了使用行内数据来标识行的方法。主键可以基于一个或多个列,例如名字和姓氏;但是,在许多设计中,主键是来自标识列的自动生成的数字。

    主键具有以下特征:

  • 表只能有一个主键。
  • 主键由一列或多列组成。
  • 主键强制执行表的实体完整性。
  • 定义的所有列必须定义为NOT NULL。
  • 主键唯一标识一行。
  • 默认情况下,主键会生成CLUSTERED唯一索引。
  • 独特的钥匙

    唯一键也称为唯一约束。可以使用唯一约束来确保行在数据库中是唯一的。

    我们不是已经用主键做了吗?是的,我们这样做,但是一个表可能有几组您想要的唯一列。

    在SQL Server中,唯一键具有以下特征:

  • 表上可以定义多个唯一键。
  • 唯一键默认情况下会生成NONCLUSTERED唯一索引。
  • 一列或多列构成唯一键。
  • 列可以为NULL,但允许每列一个NULL。
  • 外键约束可以引用唯一约束。
  • 来源:这里


    Unique key :-
    It should be used when you have to give unique value.In the case of
    unique key it means null values are also allowed.Unique keys are those
    keys which are unique and non similar in that column like for example
    your pet name.it can be nothing like null and if you are asking in context of database then it must be noted that every null is different from another null in the database.EXCEPT-SQL Server where null=null is true

    primary key :-
    It should be used when you have to give uniquely identify a row.primary is key which unique for every row in a database constraint is that it doesn't allow null in it.so, you might have seen that the database have a column which is auto increment and it is the primary key of the table. plus it can be used as a foreign key in another table.example can be orderId on a order Table,billId in a bill Table.

    now coming back to situation when to use it:-

    1)列中的主键可以
    在表中不是null,而在另一个表中使用外键
    用于创建关系的表

    2)表中的唯一键
    不管怎样你都不会影响表格或整个数据库
    对于特定列而言,它就像餐馆里的小吃一样
    可能你不在餐厅吃零食


    Simply Primary Key是唯一的,不能为null,unique可以为null,也可以不是唯一的。