2

以下の定義でテーブルを作成しようとすると、

CREATE TABLE `demo` (
    `id` INT(11) NOT NULL auto_increment,
    `x_id` INT(11) NOT NULL,
    `y_id` INT(11) NOT NULL,
    `z_id` INT(11) NOT NULL,
    `status` TINYINT unsigned NOT NULL,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY  (`id`),
    CONSTRAINT UNIQUE INDEX(x_id, y_id)
) ENGINE=InnoDB;

OperationalError発生します:

_mysql_exceptions.OperationalError:
(1005, "Can't create table 'xxx.frm' (errno: -1)")

末尾の を削除すると機能しENGINE=InnoDBます。

この背後にある理由は何ですか?

MySQLのバージョンは mysql Ver 14.12 Distrib 5.0.84, for pc-linux-gnu (i686) using readline 5.2

4

2 に答える 2

3

削除されたテーブルを再作成する場合は、それを参照する外部キー制約に準拠する定義が必要です。前述のように、正しい列名と型が必要であり、参照されるキーにインデックスが必要です。これらが満たされていない場合、MySQL はエラー番号 1005 を返し、エラー メッセージでエラー 150 を参照します。

MySQL が CREATE TABLE ステートメントからエラー番号 1005 を報告し、エラー メッセージがエラー 150 を参照している場合、外部キー制約が正しく形成されていないため、テーブルの作成に失敗しました。同様に、ALTER TABLE が失敗し、エラー 150 を参照する場合は、変更されたテーブルの外部キー定義が正しく形成されていないことを意味します。SHOW ENGINE INNODB STATUSを使用して、サーバーの最新の InnoDB 外部キー エラーの詳細な説明を表示できます。

外部キー制約 - エラー 1005

于 2010-11-18T09:49:26.913 に答える
0

これを試してください:

CREATE TABLE  `demo` (
  `id` int(11) NOT NULL auto_increment,
  `x_id` int(11) NOT NULL,
  `y_id` int(11) NOT NULL,
  `z_id` int(11) NOT NULL,
  `status` tinyint(3) unsigned NOT NULL,
  `created_at` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `x_id` (`x_id`,`y_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
于 2010-11-18T09:00:20.570 に答える