【问题标题】:INSERT conflict with FOREIGN KEY restrictionsINSERT 与 FOREIGN KEY 限制冲突
【发布时间】:2013-05-17 19:00:46
【问题描述】:

好吧,我遇到了一些愚蠢的问题。在 SQL Server 2012 中,我尝试像这样实现城市数据库:有一个 City 对象,一个 Street 对象指向街道所在的 City,还有一个 House 对象指向 @987654326 @房子所在的位置。

所以我写的:

CREATE TABLE City
(
    CityID      INTEGER     NOT NULL,
    CityName    VARCHAR(50) NOT NULL,

    PRIMARY KEY(CityID)
)

INSERT INTO City VALUES 
    (1, 'Moscow'),
     -- Code for 2-7id's instructions is there
    (8, 'Kazan');

CREATE TABLE Street 
(
    StreetID    INTEGER     NOT NULL,
    StreetName  VARCHAR(50) NOT NULL,
    CityID      INTEGER     NOT NULL,

    FOREIGN KEY(CityID) REFERENCES City(CityID),
    PRIMARY KEY(StreetID)
)

INSERT INTO Street VALUES
        (1, 'Nation Street', 1),
         -- code for 2-19 id's insertions is there
        (20, 'Fuj Street', 8);

CREATE TABLE House 
(
    HouseID     INTEGER     NOT NULL,
    StreetID    INTEGER     NOT NULL,
    Height      INTEGER     NOT NULL,

    FOREIGN KEY (StreetID) REFERENCES Street(StreetID),
    PRIMARY KEY(HouseID)
)

INSERT INTO House VALUES 
    (1, 1, 100),
    -- ...

第一次插入INSERT INTO HOUSE VALUES 有一个错误,编译器说INSERTFOREIGN KEY 存在一些限制冲突,但我完全不明白他在抱怨什么。

所有数据实际上都在表中,为什么我不能简单地进行插入?

这个问题的解决方法是什么?

错误信息:

INSERT 语句与 FOREIGN KEY 约束冲突冲突发生在数据库,...,表“dbo.Street”,列“StreetID”

【问题讨论】:

  • 也许粘贴错误消息而不是您从中记住的内容会有所帮助...不要做一个愚蠢的用户,尝试尽可能多地从错误消息中获取。
  • 您应该在 INSERT 语句中指定字段顺序:INSERT INTO House (HouseID, StreetID, Height) VALUES (1, 1, 100),
  • sqlfiddle.com/#!6/ae5a4/1 。给出的样本数据,就像一个魅力!所以给你所有的代码,也许......
  • 您确定 INSERT INTO HOUSE 中的所有值都是正确的。你没有把它们都显示对吗?

标签: sql foreign-keys sql-server-2012 insertion


【解决方案1】:

我建议你使用

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

而不是不带列名的 INSERT。 看起来,什么时候插入没有列名,你在 Street 中的第一个值与 StreetID 对齐,它的 ID 不高于 8。

INSERT INTO Street VALUES
        (1, 'Nation Street', 1),
         -- code for 2-19 id's insertions is there
        (20, 'Fuj Street', 8);

它违反了 FOREIGN KEY 的 RESTRICT INSERT 属性。将列名声明为我的第一个 INSERT 示例,然后您的插入将正常工作。

【讨论】:

    【解决方案2】:

    您的 House 表中存在的 StreetID 不包含在 street 表中......所以请检查两个表中是否存在相同的 streetId

    【讨论】:

      【解决方案3】:

      很可能您正在尝试插入一个街道 ID 不存在于您的街道表中的住宅...

      【讨论】:

      • 除非街道表中似乎有对应的记录。
      • 好吧,SQL 并不想打扰您。消息很经典,也很清楚,所以数据肯定有问题。尝试通过注释一半插入值来隔离有问题的行,确定有问题的行是否在注释块中,等等......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多