K tomu dochází, když máte primární klíč, ale nedáváte mu inicializační hodnotu. Duplikaci způsobuje samotná vložka.
Ve vašem případě přicházejí v úvahu dvě možnosti:
-
supp_id
je primární klíč a je deklarován jako číslo. Ve starších verzích MySQL si myslím, že se hodnoty řetězců tiše převedou na čísla. Protože úvodní znaky jsou písmena, hodnota je 0. -
Máte další
id
pole, které je primárním klíčem, ale nemá žádnou hodnotu a není deklarovánoauto_increment
.
EDIT:
Mám podezření, že chcete následující kód:
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');
Několik poznámek:
- Obvykle chcete
varchar()
spíše nežchar()
, pokud opravdu nemáte rádi mnoho mezer na konci řetězců. - Do tabulky jsem přidal jedinečný název dodavatele a deklaroval jsem ID jako
auto_increment
. - Jednoduché uvozovky jsou standardem ANSI pro řetězcové konstanty. MySQL (a některé další databáze) umožňují dvojité uvozovky, ale není důvod tento standard nepoužívat.