2012-03-26 93 views
0

Mysql不想将此数据库添加到我的本地主机数据库部分。数据库导入情况

我做错了什么?

db.sql 本教程:https://github.com/samanz/cakecart

错误:

SQL query: 

CREATE TABLE `categories` (
`id` INT(11) NOT NULL AUTO_INCREMENT , 
`name` VARCHAR(50) NULL default NULL , 
`parent_id` INT(11) UNSIGNED default '0', 
`order` INT(3) default '0', 
`image` VARCHAR(50) NULL default NULL , 
`ids` VARCHAR(225) NULL default NULL , 
`url` VARCHAR(255) NULL default NULL , 
PRIMARY KEY (`id`) , 
FOREIGN KEY (`parent_id`) REFERENCES categories(`id`) , 
UNIQUE KEY `url` (`url`) 
); 

MySQL said: Documentation 
#1005 - Can't create table 'cake_cart.categories' (errno: 150) 
+0

可能的重复。 http://stackoverflow.com/questions/1749332/mysql-cant-create-table-errno-150 – 2012-03-26 14:41:49

回答

1

应该是这个样子......

CREATE TABLE IF NOT EXISTS `categories` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(50) NOT NULL, 
    `parent_id` int(11) unsigned NOT NULL DEFAULT '0', 
    `order` int(3) NOT NULL DEFAULT '0', 
    `img` varchar(50) NOT NULL, 
    `ids` varchar(255) NOT NULL, 
    `url` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `url` (`url`), 
    KEY `parent_id` (`parent_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

我在我的数据库中更新的结构和运行它它的工作。

+0

实际上,你不想仅仅删除那个外键,因为他打算使用该列加入表。您需要确保使用正常的密钥语句对其进行索引,而不是像下面提到的那样。你的解决方案会创建表,是的,但它也会导致他的联接在表填充数据时更快得多得多。 – Brian 2012-03-26 14:43:36

+0

该行适用,尽量将整个数据库快速导入localhost,然后告诉我是否出现同样的错误。 – Dale 2012-03-26 14:44:51

+0

哎呀没看见我忘了把它放在里面。谢谢你指出,我jsut去了我的phpmyadmin,并迅速创建它:D。更新! – rackemup420 2012-03-26 14:47:24

2

错误150是一个外键问题。可能是由以下原因造成的:

FOREIGN KEY (`parent_id`) REFERENCES categories(`id`) , 

您无法对正在创建的同一张表进行“外部”键引用。只需简单地将parent_id列编入索引。

KEY `parent_id` (`parent_id`) ,