MySQL: забыл установить автоинкремент - PullRequest
7 голосов
/ 31 октября 2011

Я настроил базу данных с автоматически возрастающим столбцом, который должен был быть идентификатором.Проблема в том, что я забыл отметить автоматическое увеличение при создании таблицы в phpMyAdmin ... и не заметил до сих пор!Итак, у меня есть что-то вроде:

ID   |   column one   |   column two
------------------------------------
0    |   some value   |   some value
0    |   other value  |   something else
0    |   example val. |   something
0    |   my example   |   something

По сути, мой столбец «автоинкремента» показывает нули по всем параметрам.Как я могу изменить эту таблицу, чтобы она отображала автоинкремент для всех предыдущих и будущих строк?

Ответы [ 3 ]

9 голосов
/ 31 октября 2011

Если бы таблица была пуста, вы могли бы просто сделать:

ALTER TABLE mytable MODIFY COLUMN id bigint not null primary key auto_increment

но я не уверен, что произойдет со строками в нем. Лучше всего создать новый файл с правильными определениями, скопировать данные за минус столбец id, удалить старую (неправильную) таблицу и переместить новую в старое имя.

-- Either: 
CREATE TABLE newtable LIKE mytable;
ALTER TABLE newtable MODIFY COLUMN id bigint not null primary key auto_increment;
-- or:
CREATE TABLE newtable (
    id bigint not null primary key auto_increment,
    column1 type1,
    column2 type2,
    ...
);

INSERT INTO newtable 
    (column1, column2, ...) 
    SELECT column1, column2, column3, ... 
    FROM mytable;
-- Make SURE that insert worked BEFORE you drop the old table 
-- and lose data if it didn't.
DROP TABLE mytable;
ALTER TABLE newtable RENAME TO mytable;

Я уверен, что phpMyAdmin имеет возможность сделать это более графически.

7 голосов
/ 31 октября 2011

Сначала обновите свои записи (иначе вы получите дубликат первичного ключа):

UPDATE `tablename` SET id = 1 WHERE "column one" = 'some value';
UPDATE `tablename` SET id = 2 WHERE "column one" = 'other value';
UPDATE `tablename` SET id = 3 WHERE "column one" = 'example val.';
UPDATE `tablename` SET id = 4 WHERE "column one" = 'my example';

Затем добавьте первичный ключ / auto_increment:

ALTER TABLE tablename MODIFY COLUMN id int(11) NOT NULL primary key auto_increment;

Затем установите следующий auto_increment:

ALTER TABLE tablename  AUTO_INCREMENT = 5;
4 голосов
/ 31 октября 2011

Вы можете удалить столбец идентификатора и создать его заново.Идентификаторы будут переназначены, если вы не забыли включить автоматическое увеличение;)

...