好吧,我遇到了一些愚蠢的问题。在SQL Server 2012中,我试图像这样实现城市数据库:有一个City
对象,一个Street
对象,指向放置街道的City
,以及{{1指向放置房屋的House
的对象。
所以我写的是:
Street
首次插入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
和INSERT
存在一些限制冲突,但我完全不明白他在抱怨什么。
实际上所有数据都在表格中,为什么我不能简单地插入?
这个问题的解决方案是什么?
错误讯息:
与FOREIGN KEY约束冲突的INSERT语句数据库中发生冲突,...,表“dbo.Street”,列'StreetID'
答案 0 :(得分:1)
很可能你正试图插入街道表中不存在街道ID的房屋......
答案 1 :(得分:0)
House表中的StreetID不包含在街道表中....所以请检查表中是否存在相同的streetId
答案 2 :(得分:0)
我建议您使用
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
代替没有列名的INSERT。 看起来,当不使用列名插入时,Street中的第一个值应与ID不大于8的StreetID对齐。
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示例,那么您的插入将正常工作。