Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Doppelter Eintrag '0' für Schlüssel 'PRIMARY'

Dies tritt auf, wenn Sie einen Primärschlüssel haben, ihm aber keinen Initialisierungswert zuweisen. Die Einfügung selbst verursacht die Duplizierung.

In Ihrem Fall fallen mir zwei Möglichkeiten ein:

  1. supp_id ist der Primärschlüssel und wird als Zahl deklariert. In älteren Versionen von MySQL werden die Zeichenfolgenwerte meiner Meinung nach stillschweigend in Zahlen umgewandelt. Da die führenden Zeichen Buchstaben sind, ist der Wert 0.

  2. Sie haben eine andere id Feld, das der Primärschlüssel ist, aber keinen Wert hat und nicht als auto_increment deklariert ist .

BEARBEITEN:

Ich vermute, Sie wollen den folgenden Code:

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');

Einige Anmerkungen:

  • Normalerweise möchten Sie varchar() statt char() , es sei denn, Sie mögen wirklich viele Leerzeichen am Ende von Strings.
  • Ich habe der Tabelle einen eindeutigen Lieferantennamen hinzugefügt und die ID als auto_increment deklariert .
  • Einfache Anführungszeichen sind der ANSI-Standard für String-Konstanten. MySQL (und einige andere Datenbanken) erlauben doppelte Anführungszeichen, aber es gibt keinen Grund, den Standard nicht zu verwenden.