2013-01-23 66 views
1

我想創建一個新的magento表,我試圖引用現有的magento表。從我搜索的內容來看,我得到的問題可能是兩個問題中的一個。#1005 - 無法創建表errno:150 Magento

  1. 的FK必須有一個指數
  2. 的PK必須存在之前,FK可以引用

在這兩種情況下,我相信我做了這兩種正確。下面是現有的表架構

已有TABLES被引用

CREATE TABLE IF NOT EXISTS `core_store` (
    `store_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
    `code` varchar(32) NOT NULL DEFAULT '', 
    `website_id` smallint(5) unsigned DEFAULT '0', 
    `group_id` smallint(5) unsigned NOT NULL DEFAULT '0', 
    `name` varchar(255) NOT NULL, 
    `sort_order` smallint(5) unsigned NOT NULL DEFAULT '0', 
    `is_active` tinyint(1) unsigned NOT NULL DEFAULT '0', 
    PRIMARY KEY (`store_id`), 
    UNIQUE KEY `code` (`code`), 
    KEY `FK_STORE_WEBSITE` (`website_id`), 
    KEY `is_active` (`is_active`,`sort_order`), 
    KEY `FK_STORE_GROUP` (`group_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stores' AUTO_INCREMENT=9 ; 


CREATE TABLE IF NOT EXISTS `admin_user` (
    `user_id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, 
    `firstname` varchar(32) NOT NULL DEFAULT '', 
    `lastname` varchar(32) NOT NULL DEFAULT '', 
    `email` varchar(128) NOT NULL DEFAULT '', 
    `username` varchar(40) NOT NULL DEFAULT '', 
    `password` varchar(100) NOT NULL DEFAULT '', 
    `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `modified` datetime DEFAULT NULL, 
    `logdate` datetime DEFAULT NULL, 
    `lognum` smallint(5) unsigned NOT NULL DEFAULT '0', 
    `reload_acl_flag` tinyint(1) NOT NULL DEFAULT '0', 
    `is_active` tinyint(1) NOT NULL DEFAULT '1', 
    `extra` text, 
    `failures_num` smallint(6) NOT NULL DEFAULT '0', 
    `first_failure` datetime DEFAULT NULL, 
    `lock_expires` datetime DEFAULT NULL, 
    PRIMARY KEY (`user_id`), 
    UNIQUE KEY `UNQ_ADMIN_USER_USERNAME` (`username`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Users' AUTO_INCREMENT=25 ; 

表我想創建

CREATE TABLE `oro_dashboard` 
(`id` int unsigned NOT NULL, 
`name` varchar(255) NOT NULL default '', 
`description` varchar(64) NOT NULL default '', 
`created_by` int unsigned NOT NULL default '0', 
`created_at` date, 
`layout` varchar(255) NOT NULL default '', 
`default_store_id` int, 
PRIMARY KEY (`id`), 
KEY `IDX_ORO_DASHBOARD_CREATED_BY` (`created_by`), 
CONSTRAINT `FK_ORO_DASHBOARD_CREATED_BY_ADMIN_USER_USER_ID` FOREIGN KEY (`created_by`) REFERENCES `admin_user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, 
CONSTRAINT `FK_ORO_DASHBOARD_DEFAULT_STORE_ID_CORE_STORE_STORE_ID` FOREIGN KEY (`default_store_id`) REFERENCES `core_store` (`store_id`) ON DELETE SET NULL ON UPDATE CASCADE) 
ENGINE=INNODB charset=utf8 COLLATE=utf8_unicode_ci 

在Magento,我發現有在行動表稱爲admin_user確實有一個名爲user_id的列。有一個core_store表,它有一個名爲store_id的列。並且我的兩列都有INDEXES。

有沒有人有任何線索可能是什麼問題?以下是我的錯誤信息

#1005 - Can't create table 'db.oro_dashboard' (errno: 150) 

回答

2

似乎爲default_store_id列定義不匹配core_store.store_id 。它應該在你的表中爲smallint(5) unsignedcreated_by也有同樣的問題,但它並不妨礙表的創建

3

定義外鍵時,數據類型必須相同。

您正在將core_store.store_id定義爲smallint(5) unsigned,因此引用列必須相同:oro_dashboard.default_store_id

也不要放棄oro_dashboard.created_by

最終oro_dashboard CREATE TABLE查詢,

CREATE TABLE `oro_dashboard` 
(`id` int unsigned NOT NULL, 
`name` varchar(255) NOT NULL default '', 
`description` varchar(64) NOT NULL default '', 
`created_by` mediumint(9) unsigned NOT NULL default '0', 
`created_at` date, 
`layout` varchar(255) NOT NULL default '', 
`default_store_id` smallint(5) unsigned, 
PRIMARY KEY (`id`), 
KEY `IDX_ORO_DASHBOARD_CREATED_BY` (`created_by`) , 
CONSTRAINT `FK_ORO_DASHBOARD_CREATED_BY_ADMIN_USER_USER_ID` 
    FOREIGN KEY (`created_by`) 
    REFERENCES `admin_user` (`user_id`) 
    ON DELETE CASCADE ON UPDATE CASCADE, 
CONSTRAINT `FK_ORO_DASHBOARD_DEFAULT_STORE_ID_CORE_STORE_STORE_ID` 
    FOREIGN KEY (`default_store_id`) 
    REFERENCES `core_store` (`store_id`) 
    ON DELETE SET NULL ON UPDATE CASCADE 
) 
相關問題