自从我尝试将此代码粘贴到 phpmyadmin 数据库时,我执行 SQL 已经很久了,它不会创建表,我收到错误消息:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL PRIMARY KEY, WORKER CHAR(30), CONSTRAINT WORKER_FK FOREIGN KEY(WORKE' at line 2
这是 sql 表的代码:
CREATE TABLE REPORT(
REPORT_ID NOT NULL PRIMARY KEY,
WORKER CHAR(30) CONSTRAINT WORKER_FK FOREIGN KEY(WORKER) REFERENCES WORKER(WORKER_ID)
ON UPDATE CASCADE
ON DELETE SET NULL,
CLIENT CHAR (30) CONSTRAINT CLIENT_FK FOREIGN KEY(client) REFERENCES CLIENT(CLIENT_ID)
ON UPDATE CASCADE
ON DELETE SET NULL,
START_DATE DATE CONSTRAINT STARTDATE_FK FOREIGN KEY(JOB) REFERENCES JOB(START_DATE)
ON UPDATE CASCADE
ON DELETE SET NULL,
END_DATE DATE CONSTRAINT ENDDATE_FK FOREIGN KEY(JOB) REFERENCES JOB(END_DATE)
ON UPDATE CASCADE
ON DELETE SET NULL,
COMMENT CHAR(30)
)engine innoDB;
谁能帮帮我
最佳答案
实际的错误消息来自 report_id 没有数据类型这一事实。
REPORT_ID NOT NULL PRIMARY KEY,
应该是
REPORT_ID INTEGER NOT NULL PRIMARY KEY,
但是你还有很多问题。 “内联”外键被 MySQL 默默地忽略——即使是 InnoDB。你必须把它们移到最后。
此外,您的工作表外键不正确。首先,您的表中没有 job
列,因此 FOREIGN KEY(JOB) REFERENCES JOB(END_DATE)
不可能是正确的。
其次,您将两个不同的 PK 定义引用到同一个表。我猜你真的想要:
CONSTRAINT START_END_DATE_FK
FOREIGN KEY (START_DATE, END_DATE)
REFERENCES JOB(START_DATE, END_DATE)
ON UPDATE CASCADE
ON DELETE SET NULL,
这假设 (START_DATE, END_DATE)
是 JOB
表的主键——这听起来有点奇怪。
不确定 comment
是否是 MySQL 中的保留字。如果是,则需要引用列名。
综上所述,您可能需要这样的东西:
CREATE TABLE REPORT
(
REPORT_ID INTEGER NOT NULL PRIMARY KEY,
WORKER CHAR(30) ,
CLIENT CHAR (30),
START_DATE DATE ,
END_DATE DATE,
COMMENT CHAR(30),
CONSTRAINT WORKER_FK FOREIGN KEY(WORKER) REFERENCES WORKER(WORKER_ID)
ON UPDATE CASCADE
ON DELETE SET NULL,
CONSTRAINT CLIENT_FK FOREIGN KEY (client) REFERENCES CLIENT(CLIENT_ID)
ON UPDATE CASCADE
ON DELETE SET NULL,
CONSTRAINT START_END_DATE_FK FOREIGN KEY (START_DATE, END_DATE) REFERENCES JOB(START_DATE, END_DATE)
ON UPDATE CASCADE
ON DELETE SET NULL,
CONSTRAINT ENDDATE_FK FOREIGN KEY(JOB) REFERENCES JOB(END_DATE)
ON UPDATE CASCADE
ON DELETE SET NULL
);
关于mysql - 无法弄清楚此代码的 SQL 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15416076/