1

自从我尝试将此代码粘贴到 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;

谁能帮帮我

4

2 回答 2

2

实际的错误消息来自 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
 );
于 2013-03-14T17:36:19.467 回答
1

您没有为 定义列类型REPORT_ID。IEREPORT_ID int(11) NOT NULL PRIMARY KEY,

CREATE TABLE REPORT(
 REPORT_ID int(11) 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;
于 2013-03-14T17:35:52.413 回答