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 :
-
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. -
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 quechar()
, à 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.