2017-01-27 14 views
1

外部キーを使用してテーブルを作成しようとしていますが、過去のエラー150は取得できません。MYSQLはテーブルを作成できません:エラー150

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

すべてのテーブルはInnoDBは、次のとおりです。

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は言う:

は、ここに私のスクリプトです。私は本当に立ち往生して、それが何であるか分からないのですか?

答えて

0

を作成した後にFOREIGN KEYを追加します。だから創造の順序を変えてください。

もちろん、2番目のテーブルには、他のテーブル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行が関連していないと思います。)

+0

ああ、私はそんなに馬鹿だと感じています。ありがとう! – Erdss4

+0

ようこそ。あなたが聞いていないものを除いて、愚かな質問はありません。そして、MySQLはエラーメッセージに奇妙な行番号を付けます。 –

0

create tableコマンドで

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 

を削除します。

はあなたの最初のテーブルが第二1を参照する制約を持つテーブル

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; 
+0

おかげで、あなたの答えにも便利でした! – Erdss4

関連する問題