Тут може бути лише один стовпець авто


104

Як виправити помилку з 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;

Відповіді:


119

Мій 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;

6
Який правильний хід дії, якщо стовпець є частиною складеного ключа?
Nubcake

Який синтаксис під час зміни таблиці?
Майк Гаррісон

2
@MikeHarrison виглядає так, що можна просто поставити ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
suxur

34

Звучить повне повідомлення про помилку:

ПОМИЛКА 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;

13

Зауважте також, що "ключ" не обов'язково означає первинний ключ. Щось подібне спрацює:

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;

Це надуманий приклад і, мабуть, не найкраща ідея, але може бути дуже корисним у певних випадках.


Це допомогло мені в ситуації, коли я хотів визначити складений ключ для легкого оновлення, але я також хотів мати ідентифікатор автоматичного збільшення для цілей налагодження. Чи є щось, про що я маю знати, з точки зору ризику, окрім трохи повільнішого запису, можливо?
Маттіас Мартенс

2
@Mattias Ні, я не вірю, що існує якийсь особливий ризик. Це навмисно підтримується, при цьому автоматичний стовпець є основним ключем виключно за домовленістю (і для простоти).
Матвій

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.