如何正确导入此数据库?
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,但表中的表比此错误多得多。
请先尝试导入然后回答。
答案 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`)
)
最佳做法是规范化所有数据,并通过创建关系表来删除任意两个表之间的所有多对多关系。