2012-09-17 186 views
1

创建下面的2个表失败。谁能帮帮我吗?MySQL 150错误

错误是MySQL的:无法创建表(错误:150)

CREATE TABLE PSODEMO.APPLICATION (
    APPLICATION_ID INT NOT NULL AUTO_INCREMENT 
    , APPLICATION_TYPE VARCHAR(10) 
    , APPLICATION_STATUS VARCHAR(10) 
    , CREATE_DATE DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL 
    , MODIFIED_DATE DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL 
    , DEALER_ID INT 
    , COMPANY_NAME VARCHAR(120) 
    , WEBSITE VARCHAR(128) 
    , EMAIL VARCHAR(64) 
    , PHONE VARCHAR(32) 
    , STREET VARCHAR(124) 
    , CITY VARCHAR(64) 
    , ZIPCODE INT NOT NULL 
    , COUNTRY VARCHAR(64) 
    , DEALER_STATUS VARCHAR(32) 
    , REMARKS VARCHAR(128) 
    , INVOICE_ID INT 
    , PAYMENT_MODE VARCHAR(64) 
    , INVOICE_DATE DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL 
    , PAYMENT_DATE DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL 
    , PAYMENT_STATUS VARCHAR(64) 
    , PRIMARY KEY (APPLICATION_ID) 
    , KEY ix_APPLICATION_Applicationid(aplication_id) 
    , KEY ix_APPLICATION_dealerid(dealer_id) 
    ); 

CREATE TABLE LOGIN (
    LOGIN_ID INT NOT NULL AUTO_INCREMENT 
    , USERNAME VARCHAR(10) NOT NULL 
    , PASSWORD VARCHAR(10) NOT NULL 
    , USER_TYPE VARCHAR(1) NOT NULL 
    , APPLICATION_ID_FK INT 
    , DEALER_ID_FK INT 
    , PRIMARY KEY (LOGIN_ID) 
    , FOREIGN KEY (APPLICATION_ID_FK) REFERENCES APPLICATION(APPLICATION_ID) 
    , FOREIGN KEY (DEALER_ID_FK) REFERENCES DEALER(DEALER_ID) 
    , UNIQUE (USERNAME) 
    ); 

回答

0

表2有这个约束

FOREIGN KEY (DEALER_ID_FK) REFERENCES DEALER(DEALER_ID) 

其中DEALER可能不存在。您需要在LOGIN表之前创建表DEALER,因为LOGIN表引用表DEALERDEALER_ID,我假设它也是表的主键。

一两件事,用身边MySQL Reserved Keywords

CREATE TABLE LOGIN (
LOGIN_ID INT NOT NULL AUTO_INCREMENT 
, `USERNAME` VARCHAR(10) NOT NULL 
, `PASSWORD` VARCHAR(10) NOT NULL 
, USER_TYPE VARCHAR(1) NOT NULL 
, APPLICATION_ID_FK INT 
, DEALER_ID_FK INT 
, PRIMARY KEY (LOGIN_ID) 
, FOREIGN KEY (APPLICATION_ID_FK) REFERENCES APPLICATION(APPLICATION_ID) 
, FOREIGN KEY (DEALER_ID_FK) REFERENCES DEALER(DEALER_ID) 
, UNIQUE (USERNAME) 
); 
+0

反引号,我不能看到你的caode ..也许你有错误在您的SQL语法对不对?这是因为您正在使用[MySQL保留关键字](http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html)。为了跳过这一点,你应该在这里解释我的问题:# –

+0

反向关键字附加在这里:http://stackoverflow.com/questions/10338661/are-quotes-around-tables-and-columns-in- a-mysql-query-really-necessary – JochemQuery

+0

下面是我现在使用的,用back ticks,还有同样的问题。 CREATE TABLE'psodemo'.'LOGIN'( 'LOGIN_ID' INTEGER ZEROFILL NOT NULL AUTO_INCREMENT, 'USERNAME 'VARCHAR(45)NOT NULL DEFAULT'', 'PASSWORD' VARCHAR(45)NOT NULL DEFAULT'', 'USER_TYPE' VARCHAR(1)NOT NULL DEFAULT'', 'APPLICATION_ID_FK' INTEGER NOT NULL DEFAULT 0, 'DEALER_ID_FK' INTEGER NOT NULL DEFAULT 0, PRIMARY KEY('LOGIN_ID'), CONSTRAINT'APPLICATION_ID_FK' FO REIGN KEY'APPLICATION_ID_FK'('APPLICATION_ID_FK') REFERENCES'application'('APPLICATION_ID') ON DELETE RESTRICT –

1

MySQL Documentation

如果重新创建已删除的表,它必须有一个定义 ,它符合引用它的外键约束。它必须有 具有正确的列名和类型,并且它必须在 引用的键上有索引,如前所述。如果这些不满足,MySQL 将返回错误号1005,并引用错误 消息中的错误150。