【问题标题】:MySQL 150 Error [duplicate]MySQL 150 错误 [重复]
【发布时间】:2012-09-17 09:25:04
【问题描述】:

以下 2 个表的创建失败。谁能帮帮我?

错误是 MySQL: Can't create table (errno: 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)
    );

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    来自MySQL Documentation

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

    【讨论】:

      【解决方案2】:

      Table2 有这个约束

      FOREIGN KEY (DEALER_ID_FK) REFERENCES DEALER(DEALER_ID)
      

      DEALER 可能不存在。您需要在LOGIN 表之前创建表DEALER,因为LOGIN 表引用了表DEALER_IDDEALER_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)
      );
      

      【讨论】:

      • 我看不到你的代码。也许你的 sql 语法有错误,对吧?这是因为您使用的是MySQL Reserved Keywords。为了跳过它,你应该用反引号 ` ... 括起来关键字
      • 在我的问题中解释:stackoverflow.com/questions/10338661/…
      • 下面是现在使用的,带有反引号,仍然是同样的问题.. 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,主键(LOGIN_ID),约束APPLICATION_ID_FK外键APPLICATION_ID_FKAPPLICATION_ID_FK)引用applicationAPPLICATION_ID)删除限制
      • 我使用了反引号,但仍然是同样的错误。我也使用了与您在上面发布的相同的查询。我正在使用 MySQL 5.0 版本。请建议
      猜你喜欢
      • 2013-04-20
      • 2020-04-10
      • 2013-11-09
      • 2015-08-11
      • 2010-10-23
      • 2018-04-14
      • 1970-01-01
      相关资源
      最近更新 更多