Mysql
 sql >> Base de données >  >> RDS >> Mysql

Entrée doublée '0 'pour la clé' PRIMAIRE'

Cela se produit lorsque vous avez une clé primaire mais que vous ne lui attribuez pas de valeur d'initialisation. L'insert lui-même est à l'origine de la duplication.

Dans votre cas, deux possibilités se présentent à vous :

  1. supp_id est la clé primaire et déclarée comme un nombre. Dans les anciennes versions de MySQL, je pense que les valeurs de chaîne sont converties silencieusement en nombres. Comme les premiers caractères sont des lettres, la valeur est 0.

  2. Vous avez un autre id champ qui est la clé primaire, mais sans valeur et non déclaré auto_increment .

MODIFIER :

Je suppose que vous voulez le code suivant :

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');

Quelques remarques :

  • Habituellement, vous voulez varchar() plutôt que char() , à moins que vous n'aimiez vraiment beaucoup d'espaces à la fin des chaînes.
  • J'ai ajouté un nom de fournisseur unique à la table et déclaré l'identifiant comme étant un auto_increment .
  • Les guillemets simples sont la norme ANSI pour les constantes de chaîne. MySQL (et certaines autres bases de données) autorisent les guillemets doubles, mais il n'y a aucune raison de ne pas utiliser la norme.