4

これは機能します:

CREATE TABLE shoutbox_shout (
  shout_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  user_id INT UNSIGNED NOT NULL DEFAULT 0,
  shout_date INT UNSIGNED NOT NULL DEFAULT 0,
  message MEDIUMTEXT NOT NULL,
  KEY shout_date (shout_date)
)

...これの間:

CREATE TABLE shoutbox_shout (
  shout_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  user_id INT UNSIGNED NOT NULL DEFAULT 0,
  shout_date INT UNSIGNED NOT NULL DEFAULT 0,
  message MEDIUMTEXT NOT NULL,
  KEY shout_date (shout_date)
)

...結果:

エラーコード:1075-テーブル定義が正しくありません。自動列は1つしか存在できず、キーとして定義する必要があります

主キーを追加しましたが、それでもエラーが発生します。

4

6 に答える 6

7

引用バグ#45987、エラー1075(42000):テーブル定義が正しくありません

実際、これはサーバーのバグではなく、MyISAM(そのマニュアルページでデフォルトとして想定されている)と他の場所で文書化されているInnoDBストレージエンジンの違いです:http://dev.mysql.com/doc/refman/5.1/en/innodb- auto-increment-handling.html

MyISAMはデフォルトのエンジンではなくなりました。InnoDBはです。

また: http: //bugs.mysql.com/bug.php?id = 60104

結論

InnoDBはAUTO_INCREMENTをサポートしていませんが、テーブルに主キーが定義されていませんが、MyISAMはサポートしています。使用するエンジン(MyISAMまたはInnoDB)を選択し、それに応じてCREATETABLEステートメントを処理します。

于 2011-03-19T15:59:38.587 に答える
1

auto_increment列を主キー/キーとして定義する必要があります

CREATE TABLE shoutbox_shout (
  shout_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  user_id INT UNSIGNED NOT NULL DEFAULT 0,
  shout_date INT UNSIGNED NOT NULL DEFAULT 0,
  message MEDIUMTEXT NOT NULL,
  KEY shout_date (shout_date),
  primary key (shout_id) -- primary key
)

また

CREATE TABLE shoutbox_shout (
  shout_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  user_id INT UNSIGNED NOT NULL DEFAULT 0,
  shout_date INT UNSIGNED NOT NULL DEFAULT 0,
  message MEDIUMTEXT NOT NULL,
  KEY shout_date (shout_date),
  key (shout_id) -- key
)

エンジンタイプも定義する必要があります-innodbをお勧めします。

ばかげたオプションの表示幅を指定せずに符号なし整数データ型を使用しているのを見てうれしいです!!

于 2011-03-19T16:18:32.437 に答える
1

私はmysqlの専門家ではありませんが、

shout_id INT UNSIGNED NOT NULL AUTO_INCREMENT

は自動インクリメントであり、キーとして定義されていません...。

このビジネスで発生する多くの不明確または誤解を招くエラーメッセージを考えると、より明確なエラーメッセージを想像することはできません...。

于 2011-03-19T15:57:41.080 に答える
1

符号なしなどを使用する場合は+1ですが、nullにすることはできません...しかし、デフォルトでは0 ..であり、私にとっては常にnullですか?auto_incrementの主キーがnullになることはありません。かなり良い方向に進んでいますが、次のようにしてください。

create table shoutbox_shout (
    shout_id int unsigned auto_increment primary key,
    user_id int unsigned not null,
    shout_date datetime,
    message mediumtest not null
)engine=innodb;
于 2011-03-19T15:58:41.910 に答える
1

@Brandon_R:MySQL 5.0.67-community-ntのコマンドラインを使用しても同じエラーが発生しますが、このようなコードを使用すると機能します-

CREATE TABLE shoutbox_shout (
  shout_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  user_id INT UNSIGNED NOT NULL DEFAULT 0,
  shout_date INT UNSIGNED NOT NULL DEFAULT 0,
  message MEDIUMTEXT NOT NULL,
  KEY shout_date (shout_date),
  PRIMARY KEY (shout_id)
);
于 2011-03-19T16:00:25.097 に答える
1

エラーはこれを簡潔に説明していませんか?AUTO_INCREMENT列(ある場合)はキー列である必要があります。

あなたが示すように、そうすることで問題が解決します。

于 2011-03-19T17:03:02.440 に答える