努力找出关于外键引用的MySQL create table语句的语法错误

问题描述 投票:0回答:1

我已经动了很长时间,试图找出下面的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)
)
mysql database syntax phpmyadmin project
1个回答
0
投票

您的问题出在ON DELETE SET DEFAULT子句。尽管MySQL可以识别该子句,但表定义中不允许该子句。从manual

SET DEFAULT:MySQL解析器可以识别此操作,但是InnoDB和NDB都拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。

如果删除SET DEFAULT子句,则表创建可以正常进行。 Demo。如果需要此功能,则可以通过ON DELETE触发器来实现。

© www.soinside.com 2019 - 2024. All rights reserved.