2011-06-17 11 views
4

Mysqlが私に1280のエラー(「fk_chart_aid_aid」のインデックスが間違っている)が表示される理由を説明できますか?私は完全にここで混乱している。これを修正してテーブルを作成するにはどうしたらいいですか? "ACCOUNT"テーブルは既にデータベースに存在し、その中にデータがあります。Mysqlが私に1280の「間違ったインデックス」を与えている理由

ありがとうございました。

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) ; 

が参照されているTABLEアカウント:

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 ; 

答えて

5

はあなたがCREATE TABLE文の後にエラーを取得しているが、それ以降はCREATE INDEX

FOREIGN KEYの制約とINDEXfk_chart_aid_aidの両方の名前を付けようとしているようです。どちらか一方の名前を変えてみてください。

また、accountsテーブルでは、account_idINT(10)です。 ;私は同じ問題を満たし

+0

"create table"が機能するので、エラーが後で発生します。私は "MySql Workbench"を使ってテーブル用のコードを生成しました...私はちょうどコードが正しいと仮定しました...私は "インデックス名"を変更して何が起こるかを試してみます。 – Ronedog

+0

OK、名前が異なるようにインデックスを変更して固定しました。 Mysqlのワークベンチは名前を同じにする必要があります。なぜワークベンチがそれを行うのですか? – Ronedog

+0

@Ronedogいいえ。私はWorkbenchの経験が限られています。私は一般的にすべてを手作業でコードし、コマンドラインで作業します。うれしいことに整理されています。 –

1

...

`account_id` INT(10) UNSIGNED NOT NULL , 

けれども、私はMySQLのデフォルトがとにかくINT(10)INTを入力することを考える:にacctg_chart_of_accountsの列の定義を変更することも試してみてください手動でインデックスの名前を別の名前に変更しようとしましたが、「手動で」という考え方が嫌いで、インデックスを個別に生成する必要がある理由を理解できません。だから私は、 'フォワーディングエンジニア'の '別のインデックスステートメントを生成する'というオプションのチェックを外すことによって、createステートメント内でそれを生成することにしました。

関連する問題