2011-08-11 20 views
13

Problema extraño Parece que no puedo entender. Tengo una tabla en una base de datos MySQL con la siguiente estructura ...Entrada duplicada '2147483647' para la clave 1

CREATE TABLE IF NOT EXISTS `tblbaseprices` (
    `base_id` bigint(11) NOT NULL auto_increment, 
    `base_size` int(10) NOT NULL default '0', 
    `base_label` varchar(250) default NULL, 
    `base_price_1a` float default NULL, 
    `base_price_2a` float default NULL, 
    `base_price_3a` float default NULL, 
    `base_price_1b` float default NULL, 
    `base_price_2b` float default NULL, 
    `base_price_3b` float default NULL, 
    `site_id` int(11) default NULL, 
    PRIMARY KEY (`base_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=134 ; 

La última base_id tengo allí es 132. Asumo un par de discos que se haya eliminado a AUTO_INCREMENT se establece en 134, como se puede ver sobre. Estoy tratando de ejecutar la siguiente instrucción SQL, y cuando lo hago, aparece el error "Entrada duplicada '2147483647' para la clave 1".

INSERT INTO tblbaseprices (site_id, base_size, base_price_1a, base_price_2a, base_price_3a, base_price_4a) VALUES ('', '', '', '', '', '') 

¿Alguien tiene alguna idea?

¡Muchas gracias!

+0

Cualquier razón por la que inseret cadenas vacías en columnas de flotación/int? – Jacob

+2

¿Qué es 'base_price_4a'? No lo veo en tu 'create table'. – sapht

+1

@sapht Puede ser la razón del error. – Devart

Respuesta

4

Contigo código Tengo este error - Desconocido columna 'base_price_4a' en 'lista de campos'. Significa que está intentando insertar en otra tabla (tal vez en otro esquema), y esa tabla tiene la clave principal INT y AUTO_INCREMENT = 2147483647.

+1

Buen ojo. @Doyley: ¡compruebe si nos muestra la estructura correcta/actual de la tabla! – Mchl

+0

@Mchl sapht tiene buen ojo ;-) – Devart

+0

Ah ... Publiqué una tabla de la base de datos incorrecta, y hubo un error en la publicación del código en esa tabla. Intentaba generar una ID en php y luego publicarla en la columna de incremento automático, lo que provocó que se agotara al máximo. ¡Gracias por tu ayuda! – Doyley

1

Está insertando cadenas vacías en columnas numéricas. Por lo que puedo ver, también estás insertando en una columna que no existe en el esquema. Supongo que esto tiene algo que ver con tu error.

+0

¿Por qué importaría eso? De acuerdo con la declaración create table, site_id no es una clave en absoluto. – hoppa

+0

Oh, lo siento, leí mal la inserción, orden extraña. – sapht

1

problema con y sin signo

alter table tblbaseprices 
modify column site_id int(10) unsigned NOT NULL; 

referencia - http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html

  • asegurarse sin signo de clave externa (en este caso podría ser el site_id)
  • que podría ser causada por gatillo ,
  • no hay int(11), el máximo que puede ir es int(10)
  • no hay necesidad de permitir que el valor negativo para la Identificación
  • ser constantemente utilizando el mismo tipo de datos de clave primaria
+0

¿Pero por qué se manifiesta en AUTO_INCREMENT = 134? La columna PK es una gran idea. – Mchl

+0

Solo menciona la clave 1, lo que puedo pensar es la clave externa – ajreal

+0

'Key 1' es la primera clave en la tabla (no hay' key 0') y esta tabla solo tiene una clave. – Mchl

2

has alcanzado el límite entero de 32 bits, evitando así que el incremento automático de incrementando cambiar su pk a bigint con una longitud de columna más alta debería solucionar el problema.

Además, si su PK nunca va a ser negativo, cambiar a un int sin firmar le dará más espacio.

+1

32b límite entero en 134? – Mchl

+0

no, "Entrada duplicada '2147483647' para la clave 1", donde la clave 1 es la clave principal (EDIT: parece que hice una mala suposición, y pensé que estaba ocurriendo una importación masiva ...) – Jason

+0

También PK es un bigint sin signo aparentemente – Mchl

2

Intente cambiar la columna auto_increment por bigint en lugar de int, luego el valor máximo sería '9223372036854775807' o incluso '18446744073709551615' si lo hace sin firmar (sin valores por debajo de 0).

Cambie su Auto_Increment a la última identificación en la columna para que continúe donde lo dejó.

Asegúrese de no eliminar auto_increment, de lo contrario, seguirá produciendo el error.

+0

la columna PK ya está bigint – Mchl

0

Hoy he recibido el error duplicate key 2147483647

Creo que salió cuando traté de insertar un registro en la base de datos de PhpMyAdmin, mientras se escribe, también trataron de entrar en el valor de la clave y fue Eider inferior a la corriente Next autoindex o traté de escribir algo así como 99999999999999 como campo clave, y que provocó que se establece Next autoindex al máximo

de todos modos, la erorr fue causado porque Next autoindex fue 2147483647 para esa tabla. Mi mesa estaba vacía, así que fijo que por esta consulta:

ALTER TABLE table_name AUTO_INCREMENT = 0 

si la tabla contiene datos, vuelva a colocar 0 con su clave máximo más 1

4

2147483647 es el mayor valor int para MySQL. Simplemente cambie el tipo de int a bigint.

0

es un problema de la base de datos. comprobar su phpmyadmin> su base de datos> estructura, su clave primaria debe ser setted en "bigint", no sólo "int"

0
CREATE TABLE IF NOT EXISTS `tblbaseprices` (
    `base_id` bigint(11) NOT NULL auto_increment, 
    `base_size` int(10) NOT NULL default '0', 
    `base_label` varchar(250) default NULL, 
    `base_price_1a` float default NULL, 
    `base_price_2a` float default NULL, 
    `base_price_3a` float default NULL, 
    `base_price_1b` float default NULL, 
    `base_price_2b` float default NULL, 
    `base_price_3b` float default NULL, 
    `site_id` int(11) default NULL, 
    PRIMARY KEY (`base_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=134 ; 
-1

Entrada duplicada '57.147-2147483647' para 'app_user' tecla [INSERT INTO user_lookup (user_id , app_id, app_user_id, special_offers, ip_address) VALUES ('2426569', '57147', '4009116545', 1, 1854489853)]

Cuestiones relacionadas