2017-02-23 19 views
1

我正在构建一个小型数据库,并且在我的最后一张表中的这两行中出现语法错误。MySQL中的语法错误 - 在较早的表中工作的语法相同

它们是外键,并且这些行不会在它们最初出现的表中产生任何错误。

INVOICE_ID  INTEGER NOT NULL AUTO_INCREMENT UNIQUE, 
DONUT_ID  VARCHAR(10) NOT NULL UNIQUE, 

这两条线都在表中的PK和FK,我想这就是我遇到的问题,因为我用的是相同的语法我在以前的表未产生任何做错误。

下面是四个表的完整代码:

CREATE TABLE CUSTOMER (
CUST_ID  INT NOT NULL  AUTO_INCREMENT  UNIQUE, 
CUST_LNAME  VARCHAR(25) NOT NULL, 
CUST_FNAME  VARCHAR(25) NOT NULL, 
CUST_INITIAL CHAR(1), 
CUST_STREET_NO VARCHAR(6), 
CUST_STREET_NAME  VARCHAR(25), 
CUST_APT_NO  VARCHAR(10), 
CUST_CITY  VARCHAR(25), 
CUST_STATE  CHAR(2), 
CUST_ZIP_CODE  CHAR(5), 
CUST_HOME_AC  CHAR(3), 
CUST_HOME_PHONE  CHAR(8), 
PRIMARY KEY (CUST_ID) 
)ENGINE = InnoDB; 

CREATE TABLE INVOICE (
INVOICE_ID  INTEGER NOT NULL AUTO_INCREMENT UNIQUE, 
CUST_ID  INTEGER NOT NULL, 
INV_DATE DATE NOT NULL, 
SPECIAL_HANDLING VARCHAR(35), 
PRIMARY KEY (INVOICE_ID), 
FOREIGN KEY (CUST_ID) REFERENCES CUSTOMER(CUST_ID) ON UPDATE CASCADE 
)ENGINE = InnoDB; 

CREATE TABLE PRODUCT (
DONUT_ID  VARCHAR(10) NOT NULL UNIQUE, 
DONUT_NAME  VARCHAR(25) NOT NULL, 
DONUT_DESC VARCHAR(35) NOT NULL, 
DONUT_PRICE DECIMAL(13,2) NOT NULL, 
PRIMARY KEY (DONUT_ID) 
)ENGINE = InnoDB; 

CREATE TABLE INVOICE LINE ITEM (
INVOICE_ID  INTEGER NOT NULL AUTO_INCREMENT UNIQUE, 
DONUT_ID  VARCHAR(10) NOT NULL UNIQUE, 
DONUT_QTY  INTEGER NOT NULL, 
PRIMARY KEY (INVOICE_ID, DONUT_ID), 
FOREIGN KEY (INVOICE_ID) REFERENCES INVOICE(INVOICE_ID) ON UPDATE CASCADE, 
FOREIGN KEY (DONUT_ID) REFERENCES PRODUCT(DONUT_ID) ON UPDATE CASCADE 
)ENGINE = InnoDB; 
+0

什么是确切的错误消息? – GurV

回答

0

第四CREATE TABLE语句将失败,因为在表名的空间:

CREATE TABLE INVOICE LINE ITEM ... 

你应该使用不同的名称,而不空间。例如,您可以用下划线替换空格并使用蛇形案例:

CREATE TABLE INVOICE_LINE_ITEM ... 
+0

它总是最简单的事情,不是吗?不能相信我错过了..... –