我已经动了很长时间,试图找出下面的Property create table语句中的第一个外键引用出了什么问题。为了隔离该错误,我尝试删除外键引用,并仅在属性表中创建带有第二个外键引用的表(例如:vendorId-> Vendor(vendorId)),并且该表能够被创建而没有任何问题。因此,我相信我的手上可能存在设计缺陷,这令我感到担忧。引用的两个表也都已创建,因此这不是问题。帮助将不胜感激,谢谢! (抱歉,如果我没有看到它的某种愚蠢的语法错误)
错误在Property create table语句的第11行:错误#1064您的SQL语法有错误第11行:PRIMARY KEY(pid,vendorId),第12行:FOREIGN KEY(apptStatus)参考AgentSchedule(apptStatus)
这里是引用AgentSchedule表和Vendor表的属性表的代码
CREATE TABLE Property(
pid INTEGER,
vendorId INTEGER,
houseDescr CHAR(150),
photoCopy CHAR(5),
propertyAddr CHAR(50),
apptStatus CHAR(5) DEFAULT 'False',
numVisits INTEGER,
propertyComments CHAR(150),
isEmpty CHAR(5),
PRIMARY KEY (pid, vendorId),
FOREIGN KEY (apptStatus) REFERENCES AgentSchedule(apptStatus)
ON DELETE SET DEFAULT
ON UPDATE CASCADE,
FOREIGN KEY (vendorId) REFERENCES Vendor(vendorId)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT TOF CHECK(photoCopy IN ('True','False')
AND apptStatus IN ('True', 'False')
AND isEmpty IN ('True', 'False'))
)
这里是与属性表中第一个外键引用相对应的引用表的代码。
CREATE TABLE AgentSchedule(
aid INTEGER,
propertyId INTEGER,
apptTime DATE UNIQUE,
apptStatus CHAR(5),
sickOrHolidays CHAR(5),
PRIMARY KEY (aid, propertyId),
CONSTRAINT TOF CHECK( apptStatus IN ('True', 'False')
AND sickOrHolidays IN ('True', 'False'))
)
这里是与属性表中的第二个外键引用相对应的引用表。
CREATE TABLE Vendor(
vendorId INTEGER,
name CHAR(50),
phone INTEGER,
faxNum INTEGER,
PRIMARY KEY (vendorId),
CONSTRAINT PHONE CHECK(Phone >= 1000000000 AND Phone <= 9999999999
AND faxNum>= 1000000000
AND faxNum <= 9999999999)
)