首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外键和MySQL错误

问外键和MySQL错误
EN

Stack Overflow用户
提问于 2009-11-29 10:00:09
回答 1查看 8.5K关注 0票数 10

我有以下脚本在MySQL版本5.1中创建一个表,它引用其他3个表。所有3个表都是使用InnoDB创建的,并且所有3个表的ID列都定义为INT。

我已经成功地创建了引用ACCOUNT和PERSON的其他表,但是,这是第一个引用ADDRESS的表,因此我还在下面包含了该表的定义,如run。

我得到的错误是error 1005 (HY000)和errno150,据我所知这与外键创建有关。

失败的脚本为(为简单起见,删除了额外的列):

代码语言:javascript
复制
CREATE TABLE WORK_ORDER (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ACCOUNT_ID INT NOT NULL,
    CUSTOMER_ID INT NOT NULL,
    SALES_ID INT,
    TRADES_ID INT,
    LOCATION_ID INT NOT NULL,
    INDEX CUST_INDEX(CUSTOMER_ID),
    INDEX SALES_INDEX(SALES_ID),
    INDEX TRADES_INDEX(TRADES_ID),
    INDEX ACCOUNT_INDEX(ACCOUNT_ID),
    INDEX LOCATION_INDEX(LOCATION_ID),
    FOREIGN KEY (CUSTOMER_ID) REFERENCES PERSON(ID) ON DELETE CASCADE,
    FOREIGN KEY (SALES_ID) REFERENCES PERSON(ID) ON DELETE SET NULL,
    FOREIGN KEY (TRADES_ID) REFERENCES PERSON(ID) ON DELETE SET NULL,
    FOREIGN KEY (ACCOUNT_ID) REFERENCES ACCOUNT(ID) ON DELETE CASCADE,
    FOREIGN KEY (LOCATION_ID) REFERENCES ADDRESS(ID) ON DELETE SET NULL
) ENGINE=InnoDB;

用于创建ADDRESS表的SQL语句如下(为简单起见,删除了额外的列)。

代码语言:javascript
复制
CREATE TABLE ADDRESS (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    PERSON_ID INT NOT NULL,
    ACCOUNT_ID INT NOT NULL,
    ADDRESS_L1 VARCHAR(50),
    ADDRESS_L2 VARCHAR(50),
    CITY VARCHAR(25),
    PROVINCE VARCHAR(20),
    POSTAL_CODE VARCHAR(6),
    COUNTRY VARCHAR(25),
    INDEX CUST_INDEX(PERSON_ID),
    INDEX ACCOUNT_INDEX(ACCOUNT_ID),
    FOREIGN KEY (ACCOUNT_ID) REFERENCES ACCOUNT(ID) ON DELETE CASCADE,
    FOREIGN KEY (PERSON_ID) REFERENCES PERSON(ID) ON DELETE CASCADE
) ENGINE=InnoDB;

我在这里浏览了几个处理类似问题的问题,但大多数问题似乎是重复定义和不匹配的字段类型,以及一些表没有使用InnoDB。然而,这些似乎都不是问题所在。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-30 06:33:58

您可以随时发出“SHOW ENGINE INNODB STATUS”命令。在输出中将隐藏一个“最新的外键错误”部分,它将提供有关导致'150‘错误的确切原因的更多细节:

代码语言:javascript
复制
mysql> create table a (x int not null) type=innodb;
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> create table b (y int not null, foreign key (y) references a (x) on delete set null) type=innodb;
ERROR 1005 (HY000): Can't create table './test/b.frm' (errno: 150)

mysql> show engine innodb status;
[..... snip snip snip ...]
------------------------
LATEST FOREIGN KEY ERROR
------------------------
091129 16:32:41 Error in foreign key constraint of table test/b:
foreign key (y) references a (x) on delete set null) type=innodb:
You have defined a SET NULL condition though some of the
columns are defined as NOT NULL.
[.... snip snip snip ...]
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1814392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档