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 を使用しても無視されます。それらを最後まで移動する必要があります。

さらに、jobs テーブルへの外部キーが正しくありません。まずjob、テーブルに列がないため、FOREIGN KEY(JOB) REFERENCES JOB(END_DATE)正しくありません。

次に、同じテーブルに対して 2 つの異なる 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。すなわちREPORT_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 に答える