为什么Mysql给我错误1280“错误的索引”

时间:2011-06-17 16:45:02

标签: mysql

任何人都可以解释为什么Mysql给我错误1280(“fk_chart_aid_aid'的错误索引”)错误,当我尝试创建“TART OF ACCOUNTS”表时。我在这里完全糊涂了。我该如何解决这个问题,以便创建表格? “ACCOUNT”表已存在于数据库中,并且其中包含数据。

感谢您的帮助。

MYSQL服务器版本:5.1.54

帐户图表:

DROP TABLE IF EXISTS `rst`.`acctg_chart_of_accounts` ;
CREATE  TABLE IF NOT EXISTS `rst`.`acctg_chart_of_accounts` (
  `acctg_chart_of_accounts_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `account_id` INT UNSIGNED NOT NULL ,
  `account_nbr` VARCHAR(45) NULL ,
  `description` VARCHAR(45) NULL ,
  `account_type` INT UNSIGNED NULL ,
  `commissionable` TINYINT UNSIGNED NULL ,
  `hidden` TINYINT UNSIGNED NULL ,
  `deduct_balance_from_owner_check` TINYINT UNSIGNED NULL ,
  PRIMARY KEY (`acctg_chart_of_accounts_id`) ,
  CONSTRAINT `fk_chart_aid_aid`
    FOREIGN KEY (`account_id` )
    REFERENCES `rst`.`account` (`account_id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)    
ENGINE = InnoDB;
CREATE INDEX `fk_chart_aid_aid` ON `rst`.`acctg_chart_of_accounts` (`account_id` ASC) ;

正在参考的帐户表:

CREATE TABLE IF NOT EXISTS `account` (
  `account_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `account_status_id` int(10) unsigned NOT NULL,
  `company_name` varchar(155) DEFAULT NULL,
  `address1` varchar(155) DEFAULT NULL,
  `address2` varchar(155) DEFAULT NULL,
  `city` varchar(155) DEFAULT NULL,
  `state` varchar(155) DEFAULT NULL,
  `zip` varchar(45) DEFAULT NULL,
  `country` varchar(255) DEFAULT NULL,
  `work_phone` varchar(45) DEFAULT NULL,
  `mobile_phone` varchar(45) DEFAULT NULL,
  `time_zone` varchar(45) DEFAULT NULL,
  `subdomain` varchar(155) DEFAULT NULL,
  `cname_URL` varchar(255) DEFAULT NULL,
  `promotion_code` varchar(45) DEFAULT NULL,
  `can_we_contact_you` tinyint(4) DEFAULT NULL COMMENT '0=false, 1=true',
  `units_managed_nbr` varchar(10) DEFAULT NULL,
  `a_hear_about_us_list_id` tinyint(3) unsigned DEFAULT NULL COMMENT 'populated from dropdown list.',
  `receive_special_offers` tinyint(4) DEFAULT NULL,
  `receive_announcements` tinyint(4) DEFAULT NULL,
  `receive_newsletter` tinyint(4) DEFAULT NULL,
  `create_ts` timestamp NULL DEFAULT NULL,
  `expires` timestamp NULL DEFAULT NULL,
  `storage_capacity` varchar(255) DEFAULT NULL COMMENT '1073741824 = 1GB',
  `logo` varchar(455) DEFAULT NULL,
  `max_active_connections` int(11) DEFAULT '3',
  `_product_id` int(11) DEFAULT NULL,
  `report_footer` varchar(455) DEFAULT NULL,
  `welcome_dialog` tinyint(4) DEFAULT '1',
  `ARB_subscription_id` int(11) DEFAULT NULL,
  `trashbin` tinyint(4) NOT NULL DEFAULT '1',
  PRIMARY KEY (`account_id`),
  KEY `fk_account_account_status_id` (`account_status_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=58 ;

2 个答案:

答案 0 :(得分:5)

您是在CREATE TABLE声明之后,还是在随后的CREATE INDEX之后收到错误?

您似乎试图为FOREIGN KEY约束和INDEX fk_chart_aid_aid命名。尝试为其中任何一个选择不同的名称。

此外,在accounts表中,account_idINT(10)。还可以尝试将acctg_chart_of_accounts中的列定义更改为:

`account_id` INT(10) UNSIGNED NOT NULL ,

尽管如此,我认为mysql默认类型为INTINT(10) ...

答案 1 :(得分:1)

我遇到了同样的问题;尝试手动将索引重命名为不同的名称,但不喜欢“手动”的想法,我也不明白为什么我们需要单独生成索引。所以我决定通过在“转发工程师”中取消选中“生成单独的索引语句”选项在create语句中生成它,这样就解决了这个问题。