Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mục nhập trùng lặp '0' cho khóa 'CHÍNH'

Đ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:

  1. 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.

  2. 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áo auto_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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dấu thời gian MySQL chọn phạm vi ngày

  2. Cơ sở dữ liệu kết quả là đối tượng hay mảng?

  3. Làm thế nào để tạo một bảng mysql với các cột ngày và giờ?

  4. Lỗi 1215:Không thể thêm ràng buộc khóa ngoại

  5. MySQL so với MariaDB