【问题标题】:Sql combine value of two columns as primary keysql将两列的值组合为主键
【发布时间】:2016-11-02 14:08:47
【问题描述】:

我有一个 SQL Server 表,我在其中插入帐户数据。同一账号不能在同一天重复,但如果日期发生变化,可以重复。

客户根据日期和帐号检索数据。

总之日期+账号是唯一的,不能重复。

由于两者都是不同的字段,我应该将两者连接起来并创建第三个字段作为主键,或者可以选择在合并值上设置主键。

请以最佳方式指导。

【问题讨论】:

    标签: sql primary-key


    【解决方案1】:

    您可以创建复合主键。当您创建表时,您可以在 SQL Server 中执行此类操作;

    CREATE TABLE TableName (
      Field1 varchar(20),
      Field2  INT,
      PRIMARY KEY (Field1, Field2))
    

    看看这个对每种 SQL 风格都有帮助的问题

    How can I define a composite primary key in SQL?

    【讨论】:

      【解决方案2】:

      请看一下,它会消除大部分疑虑!

      我们可以将 2 列或更多列组合为主键。

      在这种情况下,主键中包含的每一列都会被调用复合键

      请注意复合键永远不能为空 !!

      现在,首先让我向您展示如何将 2 列或更多列作为主键。

      create table table_name ( col1 type, col2 type, primary key(col1, col2));
      

      好处是:

      1. col1 的值为 (X)col2 的值为 (Y),那么其他行不能将 col1 作为 (X) 将 col2 作为 (Y)。 p>

      2. col1、col2 必须有一些值,不能为空!!

      希望对您有所帮助

      【讨论】:

        【解决方案3】:

        一点也不。只需使用主键约束:

        alter table t add constraint pk_accountnumber_date primary key (accountnumber, date)
        

        您也可以在create table 语句中包含此内容。

        不过,我可能会建议您使用自动递增/标识/序列主键——每行的唯一编号。然后将帐号/日期组合声明为唯一键。我更喜欢这种合成主键有几个原因:

        • 它们使引用外键关系中的一行变得容易。
        • 它们会在表格中显示插入顺序,因此您可以轻松查看最后插入的行。
        • 它们使识别单行以进行更新和删除变得简单。
        • 它们对引用表和应用程序隐藏行的“id”信息。

        【讨论】:

          【解决方案4】:

          另一种方法是有一个 PK,它是一个自动递增的数字,然后在自然键上放置一个唯一的唯一索引。这样可以保留唯一性,但您可以最快地加入任何子表。如果表永远不会有子表,那么复合 PK 是一个好主意。如果有很多子表,这可能是一个更好的选择。

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-21
          • 1970-01-01
          • 1970-01-01
          • 2020-04-24
          • 2021-07-24
          • 1970-01-01
          • 2017-10-26
          相关资源
          最近更新 更多