2011-10-30 21 views
6

Configuré una base de datos, con una columna de aumento automático que se suponía que era una ID. El problema es que olvidé marcar el incremento automático al crear la tabla en phpMyAdmin ... ¡y no me di cuenta hasta ahora! Así que lo que tengo es algo así como:MySQL: Olvidé configurar el Incremento automático

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

Básicamente, mi columna "Aumento automático" muestra ceros en todos los ámbitos. ¿Cómo podría modificar esta tabla para mostrar el incremento automático para todas las filas anteriores y futuras?

+1

¿Tiene un esquema de la tabla? –

Respuesta

8

Si la mesa estaban vacíos que sólo podía hacer:

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

pero no estoy seguro de lo que sucederá con filas en el mismo. Puede ser mejor crear uno nuevo con las definiciones correctas, copiar los datos en menos la columna de ID, colocar la tabla anterior (incorrecta) y mover la nueva al nombre anterior.

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

Estoy seguro de que phpMyAdmin tiene la capacidad de hacer esto de forma más gráfica.

+0

Sí, esto funcionará. Simplemente modifique la columna para que sea una 'PRIMARY KEY' y' auto_increment'. –

+1

+1 buena solución si tiene muchos registros –

6

Primero actualice sus registros (de lo contrario obtendrá una llave duplicada primaria):

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'; 

A continuación, agregue la clave principal/AUTO_INCREMENT:

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

asentando después la siguiente AUTO_INCREMENT:

ALTER TABLE tablename AUTO_INCREMENT = 5; 
+0

Actualizar todos los registros va a ser muy lento y laborioso si hay más de un par de líneas. – Kevin

+0

Estoy de acuerdo, pero en el ejemplo hay 4 registros. Elegí el tuyo si el usuario tiene muchos registros –

4

Puede soltar la columna ID y volver a crearla. Los identificadores se reasignarán si recordó habilitar el incremento automático;)

Cuestiones relacionadas