如何正确导入此数据库?

时间:2012-03-27 08:28:14

标签: php mysql database cakephp

如何正确导入此数据库?

https://github.com/samanz/cakecart

每次导入时我都会收到此错误:

Error

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 'db.categories' (errno: 150) 

外键是错误150,但表中的表比此错误多得多。

请先尝试导入然后回答。

3 个答案:

答案 0 :(得分:2)

这是有效的:

CREATE TABLE `categories` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 50 ) NULL default NULL ,
`parent_id` INT( 11 ),
`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` )
);

编辑:实际上你只需要删除unsigned就可以了。但我真的不知道你为什么要它默认为0.它应该是默认的NULL,这是默认的默认值.. :))

我认为parent_id的类型必须与id相同。

答案 1 :(得分:-1)

问题在于,您正在尝试创建表category。在此表中您使用的是forign键,但此forign键包含的表尚未创建。

首先创建表格parent_id。之后尝试创建category

答案 2 :(得分:-1)

我认为它会给你和错误,因为你引用了一个不存在的,尚未创建的表,这是你试图创建自己的表。

为什么不首先创建表然后添加约束(外键)?

但是可能会出现错误,您可能会在同一个表中遇到这种情况。如果新添加的记录没有分配父项,会发生什么?默认值为0.这会给你一个错误,因为没有id = 0的记录吗?

我建议您通过为此创建关系表来规范化。

CREATE TABLE CategoryGroups //or whatever name you find fits.
(
`Cat_id` int(11) NOT NULL,
`Parent_id` int(11),
FOREIGN KEY (`Parent_id`) REFERENCES categories(`id`),
FOREIGN KEY (`Cat_id`) REFERENCES categories(`id`)
)

最佳做法是规范化所有数据,并通过创建关系表来删除任意两个表之间的所有多对多关系。