2011-10-05 13 views
5

Necesito agregar un identificador automático de incremento a una tabla ya existente. Lo hice:¿Cómo agregar la clave primaria de incremento automático en función de un orden de columna?

ALTER TABLE table_name ADD column_name INT NOT NULL AUTO_INCREMENT FIRST , 
ADD PRIMARY KEY (column_name) 

Sin embargo, la numeración automática no se basaba en ningún orden de columna en particular. Quiero que mysql ponga inteligentemente números automáticos basados ​​en el orden de cierta columna. ¿Es posible?

La mayoría de las respuestas explican cómo agregar campos de incremento automático, no cómo controlar esos números en una tabla ya existente.

Respuesta

3
  1. agregar un nuevo campo - ALTER TABLE table_name ADD column_name INT FIRTS;
  2. datos pueblan en el nuevo campo.
  3. Hacer este campo como parte de la clave principal y la opción de añadir AUTO_INCREMENT -

    ALTER TABLE nombre_tabla CAMBIO INT ID columna id (11) NOT NULL AUTO_INCREMENT, agregar la clave principal (id);

EDIT:

probar este plan:

  1. crear otra mesa, lo mismo que table_name.
  2. Rellenar nueva tabla con datos ordenados de table_name tabla:

    INSERT INTO nombre_tabla_temp SELECT * FROM nombre_tabla ORDER BY nombre;

  3. vacío table_name tabla:

    TRUNCATE TABLE nombre_tabla;

  4. Alterar table_name tabla, agregar el nuevo campo de incremento automático y hacerlo primario (su código).

  5. Copiar datos de temp. tabla al table_name:

    INSERTAR EN table_name SELECT NULL, t. * FROM temp_table_name t;

+0

Gracias por su respuesta devart. En el paso 2, no quiero llenar el campo manualmente.Más bien, pídales que se llenen automáticamente en función del orden de columna de column_name – jerrymouse

+0

Agregué una solución más. – Devart

7

Tenga en cuenta que la tabla de MySQL sólo puede tener una columna con AUTO_INCREMENT atributo.

Asumiendo la tabla no tiene una clave principal:

ALTER TABLE table_name ADD COLUMN new_id INT NOT NULL; 
SET @x = 0; 
UPDATE table_name SET new_id = (@x:[email protected]+1) ORDER BY whateveryouwant ASC; 
ALTER TABLE table_name ADD PRIMARY KEY new_id (new_id); 
ALTER TABLE table_name CHANGE new_id new_id INT NOT NULL AUTO_INCREMENT; 

Asumiendo la tabla ya tiene una clave primaria NO incrementado:

Sólo ommit la palabra clave PRIMARY en el cuarto mando.

+0

Puede tener una columna de Incremento automático que no sea la CLAVE PRIMARIA, siempre que haya un índice (clave) en ella. puede usar este código para agregar un índice a la columna ALTER TABLE table_name ADD INDEX new_id (new_id); – Salar

Cuestiones relacionadas