web-dev-qa-db-ja.com

自動列は1つしか存在できません

MySQLからのエラーを修正するにはどうすればよいですか?自動インクリメントカラムは1つしか持てません。

CREATE TABLE book (
   id INT AUTO_INCREMENT NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
91
BuddyJoe

私のMySQLは「テーブル定義が間違っています。自動カラムは1つしか存在できませんそしてキーとして定義する必要があります

CREATE TABLE book (
   id INT AUTO_INCREMENT NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL,
   primary key (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
101
emstol

完全なエラーメッセージが聞こえます:

エラー1075(42000):テーブル定義が正しくありません。自動列は1つのみで、キーとして定義する必要があります

primary keyフィールドにauto_incrementを追加します。

CREATE TABLE book (
   id INT AUTO_INCREMENT primary key NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
31
TMS

また、「キー」は必ずしもprimary keyを意味するわけではないことに注意してください。このような何かが動作します:

CREATE TABLE book (
    isbn             BIGINT NOT NULL PRIMARY KEY,
    id               INT    NOT NULL AUTO_INCREMENT,
    accepted_terms   BIT(1) NOT NULL,
    accepted_privacy BIT(1) NOT NULL,
    INDEX(id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

これは人為的な例であり、おそらく最良のアイデアではありませんが、特定のケースでは非常に有用です。

6
Matthew Read
CREATE TABLE book (
   id INT AUTO_INCREMENT primary key NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
5
Deept Raghav