Điều này xảy ra khi bạn có một khóa chính nhưng không cung cấp cho nó một giá trị khởi tạo. Chính phần chèn đang gây ra sự trùng lặp.
Trong trường hợp của bạn, hãy nghĩ đến hai khả năng:
-
supp_id
là khóa chính và được khai báo dưới dạng số. Trong các phiên bản MySQL cũ hơn, tôi nghĩ rằng các giá trị chuỗi được chuyển đổi âm thầm thành số. Vì các ký tự đứng đầu là các chữ cái nên giá trị là 0. -
Bạn có một
id
khác trường là khóa chính, nhưng không có giá trị và không được khai báoauto_increment
.
CHỈNH SỬA:
Tôi nghi ngờ bạn muốn mã sau:
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');
Một số lưu ý:
- Thông thường, bạn muốn
varchar()
chứ không phải làchar()
, trừ khi bạn thực sự thích nhiều khoảng trắng ở cuối chuỗi. - Tôi đã thêm một tên nhà cung cấp duy nhất vào bảng và khai báo id là
auto_increment
. - Dấu ngoặc kép là tiêu chuẩn ANSI cho các hằng số chuỗi. MySQL (và một số cơ sở dữ liệu khác) cho phép dấu ngoặc kép, nhưng không có lý do gì để không sử dụng tiêu chuẩn này.