2014-10-26 63 views
0

我想從我的服務器備份上的MySQL數據庫導入一個* .sql文件到新的虛擬主機。我嘗試通過phpMyAdmin導入。我嘗試在本地機器上運行XAMPP並導入,但仍然收到相同的錯誤。下面是create table語句:錯誤150當試圖將.sql文件導入到phpmyadmin

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

當您搜索該錯誤消息時,您發現了什麼?在獲得有關錯誤的更多信息後,您是如何調整您的查詢的? – miken32 2014-10-26 23:56:07

+0

如果你喜歡這個問題,請一步一步寫下,我必須改變這個quesry命令才能使它工作。謝謝! – Dmitri345 2014-10-27 00:00:56

+0

您是否在嘗試創建表'yv3nd_rokgallery_file_loves' – Barmar 2014-10-27 00:17:25

回答

1

errno 150通常意味着無法創建外鍵約束。沒有看到文件的其餘部分,很難說,但我猜測它是以下兩件事之一:

您的yv3nd_file_loves_file_id_files_id約束可能已在其他表中定義。您不能使用相同的名稱創建兩個約束,這可能會引發錯誤。

另一種可能性是您對不正確的類型創建了約束。在此表中,您的field_id是int(10)。如果在yv3nd_rokgallery_files表中你的id變量是什麼,但這會失敗。例如:如果在另一個表中它是int(9),這將不起作用。

如果這兩個都不正確,您可以發佈yv3nd_rokgallery_files表的代碼嗎?

EDIT

第三種可能性是,在其他的表中的字段id未設置作爲主鍵。這也會導致錯誤,因爲一個表的外鍵應該與另一個表的主鍵相匹配。

編輯2 另一種可能性可能是您在文件表之前創建file_loves表。這會導致錯誤,因爲您將創建一個表的引用,該表還不存在

+0

我發佈了更多的yv3nd_rokgallery_files表代碼 – Dmitri345 2014-10-27 00:31:51

+0

您是否在file_loves表之前創建了文件表?因爲我將這兩個表都放到了[SQLFiddle](http://sqlfiddle.com/#!2/26ded)中,並且它們工作正常。 – AdamMc331 2014-10-27 00:45:35

+0

Im將* .sql文件導入EMPTY數據庫。我創建了NEW EMPY DATABASE UTF8編碼。 而且很重要的是* .sql文件中的yv3nd_rokgallery_files表的創建代碼只會在給出這個錯誤的代碼之後進行! 它是在我的問題示例中的訂單! 1)CREATE TABLE'yv3nd_rokgallery_file_loves'( 'file_id' INT(10)無符號NOT NULL DEFAULT '0',....... 該 一些goses更多的代碼和後: 2)DROP TABLE IF EXISTS yv3nd_rokgallery_files; CREATE TABLE yv3nd_rokgallery_files(id int(10)unsigned NOT NULL AUTO_INCREMENT,filename varchar(255) – Dmitri345 2014-10-27 00:51:19

0

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這樣無符號,那麼你將得到errno 150.

你必須改變其中的一列,或者是yv3nd_rokgallery_file_loves.file_idyv3nd_rokgallery_files.id,所以它們使用相同的數據類型。

如果外鍵因其他原因失敗,errno 150也會發生。例如,表yv3nd_rokgallery_files必須是InnoDB表。是MyISAM嗎?

+0

問題:例如,表yv3nd_rokgallery_files必須是InnoDB表。是MyISAM嗎? --->答:Im將* .sql文件導入EMPTY數據庫。我創建了NEW EMPY DATABASE UTF8編碼。 – Dmitri345 2014-10-27 00:37:12