Lo que podría causar ID duplicados en un campo de clave principal incremento automático (MySQL)?

StackOverflow https://stackoverflow.com/questions/514018

  •  21-08-2019
  •  | 
  •  

Pregunta

RESUELTOS

Desde el desarrollador: el problema era que una versión anterior del código todavía estaba escribiendo a la mesa que utiliza identificadores de manual en lugar del incremento automático. Nota para mí:. Siempre comprobar si hay otras posibles ubicaciones donde la mesa se escribe a

Estamos recibiendo claves duplicadas en una tabla. Ellos no se insertan al mismo tiempo (6 horas de diferencia).

Estructura de la tabla:

CREATE TABLE `table_1` (
  `sales_id` int(10) unsigned NOT NULL auto_increment,
  `sales_revisions_id` int(10) unsigned NOT NULL default '0',
  `sales_name` varchar(50) default NULL,
  `recycle_id` int(10) unsigned default NULL,
  PRIMARY KEY  (`sales_id`),
  KEY `sales_revisions_id` (`sales_revisions_id`),
  KEY `sales_id` (`sales_id`),
  KEY `recycle_id` (`recycle_id`)
) ENGINE= MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=26759 ;

El inserto:

insert into `table_1` ( `sales_name` ) VALUES ( "Blah Blah" )

Estamos corriendo MySQL 5.0.20 con PHP5 y el uso de mysql_insert_id () para recuperar el identificador de inserción inmediatamente después de la consulta de inserción.

¿Fue útil?

Solución

He tenido unos cuantos errores de clave duplicada aparecen de repente en bases de datos de MySQL en el pasado a pesar de que la clave principal se define y AUTO_INCREMENT. Todos y cada vez que ha sido porque la mesa se ha dañado.

Si es corrupta la realización de una verificación de las tablas debe exponer el problema. Puede hacer esto ejecutando:

CHECK TABLE tbl_name

Si regresa como corrupto de todos modos (dirá generalmente el tamaño es más grande de lo que realmente debería ser), entonces basta con ejecutar la siguiente para repararlo:

REPAIR TABLE tbl_name

Otros consejos

¿El campo tiene un sales_id principal (o única) clave? Si no es así, entonces algo más probablemente está haciendo inserciones o actualizaciones que se reutilizando los números existentes. Y por "algo más" No me refiero sólo código; que podría ser un ser humano con el acceso a la base de datos de hacerlo de forma accidental.

Como el otro dijo; con su ejemplo que no es posible.

Es sin relación a su pregunta, pero usted no tiene que hacer una llave separada para la columna de clave principal - es sólo la adición de un índice no-exclusivo adicional a la mesa cuando ya tiene la clave única (primaria).

  

Estamos recibiendo claves duplicadas en una tabla.

¿Quiere decir que está recibiendo errores a medida que intenta insertar, o usted significa que usted tiene algunos valores almacenados en la columna más de una vez?

Auto-incremento sólo se activa cuando se omite la columna de su INSERT o intenta insertar NULL o cero. De lo contrario, puede especificar un valor en una sentencia INSERT, el exceso de montar el mecanismo de incremento automático. Por ejemplo:

INSERT INTO table_1 (sales_id) VALUES (26759);

Si el valor que ha especificado ya existe en la tabla, obtendrá un error.

Por favor, publicar los resultados de esta consulta:

SELECT `sales_id`, COUNT(*) AS `num`
FROM `table_1`
GROUP BY `sales_id`
HAVING `num` > 1
ORDER BY `num` DESC
  • Si usted tiene una clave única en otros campos, que podría ser el problema.

  • Si ha alcanzado el valor más alto de su columna AUTO_INCREMENT MySQL seguirá intentando volver a insertarlo. Por ejemplo, si sales_id era una columna tinyint, se llega a errores de clave duplicados después de que llegó a Identificación 127.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top