【问题标题】:SQL Server keys and foreign keysSQL Server 键和外键
【发布时间】:2010-10-14 03:01:03
【问题描述】:

如果我在同一个数据库的表 A 和表 B 中有一个主键(表 B 有它自己的主键),我将与表 A 中的主键创建一个关系,以便表 B 中的一列是外键键,这是否意味着在表 A 的主键列中创建的主键数据也将由于它是外键列而添加到表 B 中,还是我必须对这种关系进行编码,如果是,我该怎么做去吧?

【问题讨论】:

    标签: sql-server foreign-keys primary-key


    【解决方案1】:

    回答您的问题:

    ...我必须编码吗 关系,如果是,我该怎么走 关于那个?

    您需要定义两个表之间的关系。示例:

    ALTER TABLE tableB
    ADD CONSTRAINT FK_tableB_TableA FOREIGN KEY (tableAId)
        REFERENCES tableA (id) ;
    

    当你在 tableB 中插入一条记录时,你仍然需要定义 tableAId 是。 SQL Server 并不神奇地知道这应该是什么。

    所以假设 tableA 看起来像这样:

    1 | Some text | 1/1/2020
    2 | blah blah | 6/1/2021
    

    要在 tableB 中插入引用记录 2 的记录,您需要这样做:

    INSERT INTO TableB (2,'My important information')
    

    这假设 tableB 具有以下结构:

    TableB
    ---------
    Id --identity column/pk
    tableAId --fk
    SomeTextColumn
    

    【讨论】:

    • 感谢您的及时回复,我想我现在明白了。
    【解决方案2】:

    你的问题:是不是表示在A表的主键列中创建的主键数据也会因为是外键列而被添加到B表中

    不,外键不会将数据输入到其他表中。在表 B 中插入引用该外键的记录之前,您需要表 A 中的记录。

    Q #2:或者我是否必须对这种关系进行编码,如果是这样,我该如何处理?

    先插入表A,再插入表B。如果需要,可以在表A上放置一个触发器,以便在将数据输入表A时将记录插入表B...

    【讨论】:

      【解决方案3】:

      我不完全确定你在问什么,但是如果你想在表 A 中插入一条记录,在表 B 中插入一条相关记录,那么你必须将表 A 记录中的 id 指定为表 B 中的外键字段。

      这是一个例子:表作者有字段idname

      INSERT author (id, name) VALUES (5, 'James Joyce')
      

      现在表格簿有字段idauthor_idtitle

      INSERT book (id, author_id, title) VALUES(99, 5, 'Ulysses')
      

      如果作者的id 字段是自动生成的,那么您就不会在插入语句中指定它,而是使用@@IDENTITY property 检索其值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-17
        • 2011-05-25
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-19
        相关资源
        最近更新 更多