2012-04-19 9 views
0

誰かがアイデアを持ちましたが、なぜこのSQLがテーブルアカウントを作成する際にエラーを返しますか?テーブルの作成にInnoDBエラーが発生しました

1005 - テーブルを作成することはできませんが「mobilewaiter.accounts」(errnoに:150)

私が見た、その問題は、キーにインデックスを持つことができますが、すべてのものは、主キーの上に参照してください。 助けてください、ありがとう。

CREATE TABLE IF NOT EXISTS `tables` (
    `_id` int(10) NOT NULL AUTO_INCREMENT, 
    `tag` varchar(40) COLLATE utf8_czech_ci NOT NULL, 
    `name` varchar(40) COLLATE utf8_czech_ci NOT NULL, 
    `occupied` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=1 ; 

CREATE TABLE IF NOT EXISTS `users` (
    `_id` int(10) NOT NULL AUTO_INCREMENT, 
    `nick` varchar(20) COLLATE utf8_czech_ci NOT NULL, 
    `password` varchar(40) COLLATE utf8_czech_ci NOT NULL, 
    `salt` varchar(20) COLLATE utf8_czech_ci NOT NULL, 
    `email` varchar(50) COLLATE utf8_czech_ci NOT NULL, 
    `firstname` varchar(20) COLLATE utf8_czech_ci NOT NULL, 
    `lastname` varchar(20) COLLATE utf8_czech_ci NOT NULL, 
    `role` varchar(20) COLLATE utf8_czech_ci NOT NULL, 
    PRIMARY KEY (`_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=1 ; 

CREATE TABLE IF NOT EXISTS `accounts` (
    `_id` int(10) NOT NULL AUTO_INCREMENT, 
    `table_id` varchar(10) COLLATE utf8_czech_ci NOT NULL, 
    `state` varchar(20) COLLATE utf8_czech_ci NOT NULL DEFAULT 'created', 
    `user_id` int(10) NOT NULL, 
    `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `end_time` timestamp NULL DEFAULT NULL, 
    PRIMARY KEY (`_id`), 
    FOREIGN KEY (`table_id`) REFERENCES `tables`(`_id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    FOREIGN KEY (`user_id`) REFERENCES `users`(`_id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=1 ; 
+0

外部キーを省略すると動作しますか? – Hajo

+0

はい、問題はあります。しかし、私はそれが必要なので、私は知っている必要があります、正確にこのエラーの原因。また、別のテーブルを作成します。これはテーブルユーザーとの接続があり、そのテーブルはエラーなしで作成されます。 – Vaek

+0

あなたは外部キーの他の名前を試しましたか?索引などと衝突する可能性があります。 – Hajo

答えて

0

table_idvarchar(10)ですが、あなたはそれがintあるtables._idを参照したいです。外部キーを使用するには、列のデータ型が同じである必要があります。

関連する問題