Mysql
 sql >> Database >  >> RDS >> Mysql

Voce duplicata '0' per la chiave 'PRIMARIA'

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à:

  1. 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.

  2. Hai un altro id campo che è la chiave primaria, ma senza valore e non dichiarato auto_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.