siguiente - mysql error 1062 duplicate entry for key primary solucion
Entrada duplicada ''0'' para la clave ''PRIMARY'' (2)
No entiendo por qué recibo este error al intentar completar esta tabla. No hay nada en la mesa en este momento, así que no entiendo por qué habría un duplicado ...
Este es el código que estoy usando:
INSERT INTO Suppliers
(supp_id,company_name,town,phone)
Values
("ADT217","AdTec","Birmingham","0121-368-1597"),
("CPS533","CPS","Maidenhead","01382-893715"),
("FCL162","ForComp Ltd","Nottingham","01489-133722"),
("KBC355","KBC Computers","Glasgow","0141-321-1497");
Cualquier ayuda sería muy apreciada,
Gracias.
tabla de proveedores ...
CREATE TABLE suppliers(
supp_id int NOT NULL,
company_name character(15) NOT NULL,
town character(15)
phone character(15)
primary key(supp_id)
);
Con su tabla puede obtener el error como "Valor entero incorrecto", pero dependiendo de la configuración del servidor MySQL puede hacer la conversión (cadena-> int) automáticamente para su cadena de consulta debe convertirse en "0" como resultado de esto hace 2 filas con 0 como supp_id y obtener error Duplicar la entrada ''0'' para la clave ''PRIMARY'' . Supongo que está utilizando InnoDB como tipo de tabla, en este caso la consulta se ejecutará como transacción y se retrotraerá después del primer error (para este ejemplo será la segunda fila).
DROP TABLE suppliers; -- Will drop your old table
CREATE TABLE suppliers(
supp_id varchar(30) NULL, -- You can set length as you wish
company_name character(15) NOT NULL,
town character(15),
phone character(15),
primary key(supp_id)
);
INSERT INTO Suppliers
(supp_id,company_name,town,phone)
Values
("ADT217","AdTec","Birmingham","0121-368-1597"),
("CPS533","CPS","Maidenhead","01382-893715"),
("FCL162","ForComp Ltd","Nottingham","01489-133722"),
("KBC355","KBC Computers","Glasgow","0141-321-1497");
Después de cambiar el tipo de inserción, funcionará sin problemas.
Esto ocurre cuando tienes una clave principal pero no le das un valor de inicialización. La inserción en sí está causando la duplicación.
En tu caso, dos posibilidades vienen a la mente:
supp_id
es la clave principal y se declara como un número. En versiones anteriores de MySQL, creo que los valores de cadena se convierten silenciosamente en números. Como los personajes principales son letras, el valor es 0.Tiene otro campo de
id
Que es la clave principal, pero no le da ningún valor ni ha declaradoauto_increment
.
EDITAR:
Sospecho que quieres el siguiente código:
CREATE TABLE suppliers (
supplierId int NOT NULL auto_increment primary key,
supp_name varchar(255) unique,
company_name varchar(15) NOT NULL,
town varchar(15),
phone varchar(15)
);
INSERT INTO Suppliers(supp_name, company_name, town, phone)
Values (''ADT217'', ''AdTec'', ''Birmingham'', ''0121-368-1597''),
(''CPS533'', ''CPS'', ''Maidenhead'', ''01382-893715''),
(''FCL162'', ''ForComp Ltd'', ''Nottingham'', ''01489-133722''),
(''KBC355'', ''KBC Computers'', ''Glasgow'', ''0141-321-1497'');
Algunas notas:
- Normalmente quiere
varchar()
lugar dechar()
, a menos que realmente le gusten muchos espacios al final de las cadenas. -
auto_increment
un nombre de proveedor único a la tabla y declaro que el id es unauto_increment
. - Las comillas simples son estándares ANSI para constantes de cadena. MySQL (y algunas otras bases de datos) permiten comillas dobles, pero no hay ninguna razón para no usar el estándar.