2012-04-19 110 views
0

有人想法,为什么这个SQL返回错误创建表帐户?InnoDB错误与创建表

1005 - 无法创建表“mobilewaiter.accounts”(错误: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 2012-04-19 23:03:21

+0

是的,问题在那里。但我需要它,所以我需要知道,究竟是什么导致了这个错误。我还创建了另一个表,该表与表用户建立连接,并且该表将创建而不会出错。 – Vaek 2012-04-20 10:16:44

+0

您是否尝试过其他外键名称?也许他们会碰到索引等。 – Hajo 2012-04-20 10:53:23

回答

0

table_idvarchar(10),但你希望它引用tables._id这是int。为了使用外键,列的数据类型应该是相同的