簡體   English   中英

MYSQL無法創建表:錯誤150

[英]MYSQL Cannot Create Table: Error 150

我正在嘗試使用外鍵創建一些表,但是我無法通過錯誤150.它還說錯誤1005無法創建表別名。

這是我的腳本:

DROP TABLE IF EXISTS `Aliases`;
CREATE TABLE `Aliases` (
  `aliasnum` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `usernum` bigint(20) unsigned NOT NULL DEFAULT '0',
  `address` varchar(255) NOT NULL DEFAULT '',
  `display` varchar(255) NOT NULL DEFAULT '',
  `selected` tinyint(1) NOT NULL DEFAULT '0',
  `created` datetime NOT NULL,
  PRIMARY KEY (`aliasnum`),
  UNIQUE KEY `UNIQ_DISPLAY` (`usernum`,`address`,`display`),
  KEY `IX_USERNUM` (`usernum`),
  KEY `IX_USERNUM_ADDRESS` (`usernum`,`address`),
  CONSTRAINT `Aliases_fk_1` FOREIGN KEY (`usernum`, `address`) REFERENCES `Mailboxes` (`usernum`, `address`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 MAX_ROWS=4294967295 AVG_ROW_LENGTH=100 COMMENT='Store mailbox display aliases and default status information.';

DROP TABLE IF EXISTS `Mailboxes`;
CREATE TABLE `Mailboxes` (
  `address` varchar(255) NOT NULL DEFAULT '',
  `usernum` bigint(20) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`address`),
  KEY `IX_USERNUM` (`usernum`),
  KEY `IX_USERNUM_ADDRESS` (`usernum`,`address`),
  CONSTRAINT `Mailboxes_ibfk_1` FOREIGN KEY (`usernum`) REFERENCES `Users` (`usernum`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 MAX_ROWS=4294967295 AVG_ROW_LENGTH=100 COMMENT='All mailboxes for which we accept e-mail.';

錯誤說它的第29行是:

`selected` tinyint(1) NOT NULL DEFAULT '0',

所有表都是InnoDB。 我真的被卡住了,不確定它是什么?

去掉

CONSTRAINT `Aliases_fk_1` FOREIGN KEY (`usernum`, `address`) REFERENCES `Mailboxes` (`usernum`, `address`) ON DELETE CASCADE ON UPDATE CASCADE

CONSTRAINT `Mailboxes_ibfk_1` FOREIGN KEY (`usernum`) REFERENCES `Users` (`usernum`) ON DELETE CASCADE ON UPDATE CASCADE

create table命令中。

創建表后添加FOREIGN KEY

ALTER TABLE `Aliases` 
ADD CONSTRAINT `Aliases_fk_1` 
FOREIGN KEY (`usernum`, `address`) 
REFERENCES `Mailboxes` (`usernum`, `address`) 
ON DELETE CASCADE 
ON UPDATE CASCADE;

ALTER TABLE `Mailboxes`
ADD CONSTRAINT `Mailboxes_ibfk_1` 
FOREIGN KEY (`usernum`)
REFERENCES `Users` (`usernum`)
ON DELETE CASCADE
ON UPDATE CASCADE;

您的第一個表有一個約束,它引用第二個表。 因此切換創建順序。

當然,您的第二個表有一個約束,它引用了您在問題中未提及的其他一些表Users 因此,您必須首先創建Users ,然后創建Mailboxes ,然后創建Aliases

或者,您可以從表定義中刪除CONSTRAINT子句,然后在表全部可用之后創建約束,如下所示。

CREATE TABLE Users
CREATE TABLE Aliases ...
CREATE TABLE Mailboxes ...

ALTER TABLE Aliases ADD
  CONSTRAINT `Aliases_fk_1` FOREIGN KEY (`usernum`, `address`) REFERENCES `Mailboxes` (`usernum`, `address`) ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE Mailboxes ADD
  CONSTRAINT `Mailboxes_ibfk_1` FOREIGN KEY (`usernum`) REFERENCES `Users` (`usernum`) ON DELETE CASCADE ON UPDATE CASCADE;

(我認為第29行不相關。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM