违反了完整性约束

时间:2018-02-05 22:28:03

标签: sql

情况很简单,但我无法理解为什么会发生错误integrity constraint (SQL_GWMDLLKDECSEPYVDIKOHHICMM.SYS_C007123893) violated。我可以使用SELECT *提取信息并返回信息。

CREATE TABLE Courses(
CourseID int primary key,
DisciplineName varchar(4),
CourseNumber varchar(4),
NumberOfCredits smallint,
YearFirstOffered varchar(4),
CourseTitle varchar(75) 
);

-- Create faculty-courses table

CREATE TABLE FacultyCourses (

FacultyCoursesID int primary key,

CourseID int REFERENCES Courses(CourseID),

FacultyID varchar(30) REFERENCES Faculty(FacultyID));

该条目的10个条目

insert into Courses
values (2, 'CMIS','242',3, '2011','Intermediate Programming');

和25个条目:

--2 record

insert into FacultyCourses

values (2,2,'jsmith');

我想做的就是

DELETE FROM Courses
WHERE YearFirstOffered='2011';

1 个答案:

答案 0 :(得分:0)

REFERENCES中的FacultyCourses位是外键规范,它们确保每一行CourseID(如果存在)与{{1}中的行具有相同的值}}。当您尝试从Courses删除时,默认情况下,服务器不会删除从Courses引用的行。

通过向外键引用添加FacultyCourses子句,可以告诉服务器在这种情况下该做什么。默认值为ON DELETE,即IIRC,会导致您看到的错误。您还可以说ON DELETE NO ACTION,删除任何引用被删除行的行; ON DELETE CASCADE,它通过将引用行ON DELETE SET NULL设置为null来分离引用行;或CourseID设置引用行' ON DELETE SET DEFAULT为默认值。 (由于目前没有除null之外的默认值,您可能不想在这里做最后一个。)

例如,如果您想要CourseID,则可以像这样更改SQL ...

ON DELETE CASCADE

如果您无法更改密钥等,则需要确保SQL不会删除引用的行。