0
我是SQL和SQL Server的新手。我正在尝试实施一个小型数据库。但是,我不断收到三个错误。我不断收到SQL Server上的错误 - 字符串和二进制数据截断,外键约束
错误#1:
字符串或二进制数据将被截断
错误#2:
INSERT语句冲突与外键约束 “FK__Formation__Locat__25869641”
错误#3:
INSERT语句与FOREIGN KEY约束“FK__DATA__Classifica__2B3F6F97”冲突。
我试过了各种不同的改变,似乎没有任何工作。有人可以向我解释我做错了什么吗?由于
CREATE TABLE Location
(
LocationID CHAR(5) NOT NULL,
LocationName VARCHAR(75) NOT NULL,
PRIMARY KEY (LocationID)
);
CREATE TABLE Formation
(
FormationID CHAR(5) NOT NULL,
FormationName VARCHAR(75) NOT NULL,
RockType VARCHAR(75) NOT NULL,
LocationID INT NOT NULL,
PRIMARY KEY (FormationID),
FOREIGN KEY (LocationID) REFERENCES Location(LocationID)
);
CREATE TABLE Classification
(
ClassificationID CHAR(5) NOT NULL,
ClassificationType VARCHAR(75) NOT NULL,
ClassificationDescription VARCHAR(75) NOT NULL,
FormationID VARCHAR(5) NOT NULL,
PRIMARY KEY (ClassificationID),
FOREIGN KEY (FormationID) REFERENCES Formation(FormationID)
);
CREATE TABLE DATA
(
FossilID CHAR(5) NOT NULL,
FossilName VARCHAR(75) NOT NULL,
FossilType VARCHAR(75) NOT NULL,
CatalogueDate DATE NOT NULL,
ClassificationID VARCHAR(5) NOT NULL,
PRIMARY KEY (FossilID),
FOREIGN KEY (ClassificationID) REFERENCES Classification(ClassificationID)
);
INSERT INTO Location
VALUES ('001', 'Montana');
INSERT INTO Formation
VALUES ('R01', 'Hell Creek Formation', 'Cretaceous', 001);
INSERT INTO Classification
VALUES ('001', 'Saurischia', 'Brachiosauridae', 'Hell Creek Formation');
INSERT INTO DATA
VALUES ('F01', 'Brachiosaurus', 'Vertebrae', '01/MAY/2017', '001');
作为一般的最佳实践,您应该始终* *指定所插入的列 - 所以用这个,而不是你现在拥有的一切:'INSERT INTO位置(LocationID,LOCATIONNAME)VALUES ('001','Montana');' –
另外:涉及FK关系*的列的数据类型应该相同* - 您的'Location.LocationID'是'CHAR(5)',但是'Formation.LocationID'引用它是'INT' - 做出决定,为所有人使用** same **数据类型!而且由于'ID'通常是一个数值 - 使用**数字**数据类型 - INT,BIGINT等。do ** not **将数值存储为CHAR(5)! ! –