sql >> Databáze >  >> RDS >> Mysql

Duplicitní záznam „0“ pro klíč „PRIMARY“

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:

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

  2. Máte další id pole, které je primárním klíčem, ale nemá žádnou hodnotu a není deklarováno auto_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.


  1. PDOException SQLSTATE[HY000] [2002] Žádný takový soubor nebo adresář

  2. Podporuje PostgreSQL kolace bez přízvuku?

  3. MariaDB LCASE() Vysvětleno

  4. Entity Framework nefunguje s časovou tabulkou