Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 无法理解此代码的SQL语法_Mysql - Fatal编程技术网

Mysql 无法理解此代码的SQL语法

Mysql 无法理解此代码的SQL语法,mysql,Mysql,在我尝试将此代码粘贴到phpmyadmin数据库时,它不会创建表,但我得到了错误: #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 FOREI

在我尝试将此代码粘贴到phpmyadmin数据库时,它不会创建表,但我得到了错误:

#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;

有人能帮我一下吗?

您没有为
报告ID
定义列类型。ie
REPORT\u ID int(11)非空主键,

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;

实际的错误消息来自报告id没有数据类型这一事实

REPORT_ID NOT NULL PRIMARY KEY,
应该是

REPORT_ID INTEGER NOT NULL PRIMARY KEY,
但你还有很多问题。MySQL会自动忽略“内联”外键,即使使用InnoDB也是如此。你必须把它们移到最后

此外,作业表的外键可能不正确。首先,表中没有
作业
列,因此
外键(作业)引用作业(结束日期)
不能正确

其次,将两个不同的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,
这假设
(开始日期,结束日期)
作业
表的主键-听起来有点奇怪

不确定
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
 );

客户端、工作表和作业表是否存在?他们有被引用的列吗?是的,表确实存在。我会再看看我是不是把名字搞砸了。谢谢一匹没有名字的马谢谢你的帮助
int(11)
没用(
int
完全一样)。并且以这种方式定义的外键将被忽略。谢谢大家帮我解决困惑和帮助:)