Inicio Foros Bases de datos MySQL Error autoincrement duplicate key MariaDB MySQL [RESUELTO]

Viendo 5 entradas - de la 1 a la 5 (de un total de 5)
  • Autor
    Entradas
  • #50956
    Varios
    Moderador

    Al intentar aplicar el parámetro Autoincremento a un campo de un tabla que ya tiene registros (campo de tipo entero con valores numéricos) me aparece este error:

    Operation failed: There was an error while applying the SQL script to the database.
    Executing:
    ALTER TABLE almacen.stock
    CHANGE COLUMN codigo codigo INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
    ADD PRIMARY KEY (codigo);

    ERROR 1062: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry ‘1’ for key ‘PRIMARY’
    SQL Statement:
    ALTER TABLE almacen.stock
    CHANGE COLUMN codigo codigo INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
    ADD PRIMARY KEY (codigo)

    ¿Cómo puedo asignar el Autoincremento a un campo de una tabla que ya tiene registros sin que dé error?

    Utilizo MariaDB como motor de base de datos, aunque supongo que la solución será la misma si fuera MySQL.

    #50957
    alonsojpd
    Superadministrador

    El campo «codigo» que intentas establecer como autoincremento ¿tiene alguna dependencia en otra tabla? ¿es clave foránea de otra tabla?

    #50959
    Varios
    Moderador

    En principio no, es clave primaria de su tabla, pero no es clave foránea de otras tablas. No tiene dependencias.

    #50960
    alonsojpd
    Superadministrador

    ok, si te da igual qué valor tenga en el campo «codigo» cada registro, lo que puedes hacer para establecerlo como autoincremento es lo siguiente:

    1º Haz una copia de seguridad de la tabla, por si acaso necesitaras restaurarla.
    2º Elimina el campo «codigo» completamente, supongamos que la tabla se llama «stock» y la base de datos «almacen», para eliminar el campo «codigo», siendo primery key, puedes usar esta sentencia SQL:

    3º Una vez eliminado el campo «codigo» y guardada la tabla, lo que haremos ahora será crear el campo «codigo» de tipo autoincremento y primary key, con la sentencia SQL:

    Con esto, si la tabla «almacen.stock» tenía registros, regenerará los valores del campo código del 1 al número de registros que tuviera la tabla, de forma incremental. A partir de este momento, cada vez que insertes un registro en la tabla «stock», se añadirá un valor automático al campo «codigo», siendo un número incremental correlativo.

    #50961
    Varios
    Moderador

    Perfecto, muchas gracias, solucionado.
    Eliminé la columna codigo y la volví a crear como me has indicado. Efectivamente se han generado los valores nuevamente.
    Resuelto.
    Muchas gracias!!

Viendo 5 entradas - de la 1 a la 5 (de un total de 5)
  • Debes estar registrado para responder a este debate.