Dzieje się tak, gdy masz klucz podstawowy, ale nie nadaj mu wartości inicjującej. Sama wstawka powoduje duplikację.
W twoim przypadku przychodzą na myśl dwie możliwości:
-
supp_id
jest kluczem podstawowym i zadeklarowanym jako liczba. Myślę, że w starszych wersjach MySQL wartości ciągu są po cichu konwertowane na liczby. Ponieważ wiodącymi znakami są litery, wartość wynosi 0. -
Masz inny
id
pole będące kluczem podstawowym, ale bez wartości i niezadeklarowanejauto_increment
.
EDYCJA:
Podejrzewam, że chcesz następujący kod:
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');
Kilka uwag:
- Zazwyczaj chcesz
varchar()
zamiastchar()
, chyba że naprawdę lubisz dużo spacji na końcu ciągów. - Dodałem unikalną nazwę dostawcy do tabeli i zadeklarowałem id jako
auto_increment
. - Pojedyncze cudzysłowy to standard ANSI dla stałych łańcuchowych. MySQL (i niektóre inne bazy danych) pozwalają na podwójne cudzysłowy, ale nie ma powodu, aby nie używać standardu.