【问题标题】:No auto increment in my foreign key我的外键没有自动增量
【发布时间】:2018-01-28 19:44:22
【问题描述】:

我正在做我的学校项目,我想让任何学生的 id 主题作为外键自动递增。我向您展示下面的示例作为原型,有两个表,当我尝试将数据插入第二个表时,我收到错误(需要插入表的另一个字段 id)

CREATE DATABASE database1;

USE database1;

CREATE TABLE table1 
(
    IdTable1 INT NOT NULL IDENTITY,
    NOM VARCHAR(30),
    PRIMARY KEY(IDMEDO)
);

--auto increment is working here 
INSERT INTO table1 
VALUES ('data1Table1'), ('data2Table1'), ('data3Table1');

--auto increment is working here just with the primary key
CREATE TABLE table2
(
    IdTable2 INT not null IDENTITY,
    IdTable1 INT,
    dataTable2 varchar(30),
    primary key(IdTable2),
    constraint fk_tbl1 foreign key(IdTable1) references Table1
);

--necessary to add id field          
INSERT INTO table2 
VALUES ('data1Table2'), ('data2Table2'), ('data3Table2');

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您应该始终(作为“最佳实践”)定义要插入数据的列 - 这样,您可以指定必须为其提供值的列,并让 SQL Server处理其他人。对于外键,您必须显式提供一个值 - 没有“自动魔术”(或“自动递增”)方式将子行与其父表相关联 - 必须在你的INSERT声明中提供值。

    所以把你的代码改成:

    -- explicitly *specify* the NOM column here!
    INSERT INTO table1 (NOM)
    VALUES ('data1Table1'), ('data2Table1'), ('data3Table1');
    
    -- again: explicitly *specify* the columns you want to insert into!
    INSERT INTO table2 (IdTable1, dataTable2)
    VALUES (1, 'data1Table2'), (2, 'data2Table2'), (3, 'data3Table2');
    

    【讨论】:

      【解决方案2】:

      如果您输入的值不在作为外键的表 1 列中,那么您现在需要将外键的值插入到表 1 中,那么它也不会接受

      简单

      • 主键和外键应该匹配
      • 如果表 1 不包含值为 null 的主键,则外键不能为 null

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2012-07-14
        • 2014-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多