情况很简单,但我无法理解为什么会发生错误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';
答案 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不会删除引用的行。