Может быть только одна автоматическая колонка


Как исправить ошибку из MySQL "у вас может быть только один столбец автоматического приращения".

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;
5 73

5 ответов:

Мой MySQL говорит " неправильное определение таблицы; может быть только один автоматический столбец , и он должен быть определен как ключ", поэтому, когда я добавил первичный ключ, как показано ниже, он начал работать:

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;

Звучит полное сообщение об ошибке:

Ошибка 1075 (42000): неверное определение таблицы; может быть только один автоматический столбец, и он должен быть определен как ключ

Поэтому добавьте 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;
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

Обратите также внимание, что "ключ" не обязательно означает первичный ключ. Что-то вроде этого будет работать:

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;
Это надуманный пример и, вероятно, не самая лучшая идея, но в некоторых случаях он может быть очень полезен.

Если эта ошибка произойдет в CodeIgniter:

$fields=array(
'slno' => array(
        'type' => 'int',
        'constraint' => 255,
        'unsigned' => TRUE,
        'auto_increment' => TRUE
        ),
'node_id' => array(
        'type' => 'int',
        'constraint' => 255,
        'unsigned' => TRUE
        ),
'node' => array(
        'type' => 'text',
        'null' => TRUE
        )

);

$this->dbforge->add_field($fields);

$this->dbforge->add_key("slno",TRUE);

$this->dbforge->create_table($key,TRUE);

Не забудьте добавить поле первичного ключа....!