Ciò si verifica quando si dispone di una chiave primaria ma non le si assegna un valore di inizializzazione. L'inserto stesso sta causando la duplicazione.
Nel tuo caso mi vengono in mente due possibilità:
-
supp_id
è la chiave primaria e dichiarata come numero. Nelle versioni precedenti di MySQL, penso che i valori delle stringhe vengano convertiti silenziosamente in numeri. Poiché i caratteri iniziali sono lettere, il valore è 0. -
Hai un altro
id
campo che è la chiave primaria, ma senza valore e non dichiaratoauto_increment
.
MODIFICA:
Sospetto che tu voglia il seguente codice:
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');
Alcune note:
- Di solito vuoi
varchar()
anzichéchar()
, a meno che non ti piacciano molti spazi alla fine delle stringhe. - Ho aggiunto un nome fornitore univoco alla tabella e ho dichiarato che l'ID è un
auto_increment
. - Le virgolette singole sono standard ANSI per le costanti di stringa. MySQL (e alcuni altri database) consentono virgolette doppie, ma non c'è motivo per non utilizzare lo standard.