我正在尝试将我的服务器备份上的MySQL数据库中的文件* .sql导入新的虚拟主机。我尝试通过phpMyAdmin导入。我尝试在本地计算机上运行XAMPP并导入,但仍然遇到同样的错误。这是create table语句:
CREATE TABLE `yv3nd_rokgallery_file_loves` (
`file_id` int(10) unsigned NOT NULL DEFAULT '0',
`kount` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`file_id`),
UNIQUE KEY `file_id` (`file_id`),
CONSTRAINT `yv3nd_file_loves_file_id_files_id` FOREIGN KEY (`file_id`)
REFERENCES `yv3nd_rokgallery_files` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
我得到了:#1005 - 无法创建表'test.yv3nd_rokgallery_file_loves'(错误号:150)
我对此很新,所以任何帮助修复此错误都将不胜感激。
这是更多代码:
CREATE TABLE yv3nd_rokgallery_files(
id int(10) unsigned NOT NULL AUTO_INCREMENT,
filename varchar(255) NOT NULL,
guid char(36) NOT NULL,
md5 char(32) NOT NULL,
title varchar(200) NOT NULL,
description text,
license varchar(255) DEFAULT NULL,
xsize int(10) unsigned NOT NULL,
ysize int(10) unsigned NOT NULL,
filesize int(10) unsigned NOT NULL,
type char(20) NOT NULL,
published tinyint(1) NOT NULL DEFAULT '0',
created_at datetime NOT NULL,
updated_at datetime NOT NULL,
slug varchar(255) DEFAULT NULL,
PRIMARY KEY (id), UNIQUE KEY id (id),
UNIQUE KEY guid (guid),
UNIQUE KEY yv3nd_files_sluggable_idx (slug),
KEY yv3nd_rokgallery_files_published_idx (published),
KEY yv3nd_rokgallery_files_md5_idx (md5),
KEY yv3nd_rokgallery_files_guid_idx (guid))
ENGINE=InnoDB DEFAULT CHARSET=utf8;
答案 0 :(得分:1)
errno 150通常意味着无法创建外键约束。没有看到文件的其余部分,很难肯定地说,但我猜这是两件事之一:
您的yv3nd_file_loves_file_id_files_id
约束也可能已在另一个表中定义。您不能创建具有相同名称的两个约束,这可能会引发错误。
另一种可能性是您正在对不正确的类型创建约束。在此表中,您的field_id为int(10)
。如果在yv3nd_rokgallery_files
表中,您的id
变量不是任何东西,而是会失败。例如:如果在另一个表中,它是int(9),这将不起作用。
如果这些都不正确,您可以发布yv3nd_rokgallery_files
表的代码吗?
修改强>
第三种可能性是另一个表中的id
字段未设置为主键。这也会导致错误,因为一个表的外键应与另一个表的主键匹配。
编辑2 另一种可能是您在files表之前创建file_loves表。这会导致错误,因为您要创建对尚不存在的表的引用。
答案 1 :(得分:0)
如果FOREIGN KEY无法正常工作,则会报告Errno 150。
最常见的原因是外键列的数据类型与它引用的主键列的数据类型不同。
您的外键列为file_id int unsigned
。在这种情况下The argument 10 for int(10)
doesn't matter。它仍然是int unsigned
。
您的主键列位于表yv3nd_rokgallery_files
,列id
中。您应该仔细检查该列是否为int unsigned
。如果不是,例如,如果它是bigint或其他大小的int,或者它不像file_id那样没有签名,那么你将得到错误150。
您必须更改其中一列yv3nd_rokgallery_file_loves.file_id
或yv3nd_rokgallery_files.id
,以便它们使用相同的数据类型。
如果外键因其他原因而失败,也会发生错误150。例如,表yv3nd_rokgallery_files必须是InnoDB表。是MyISAM吗?