sql >> Database >  >> RDS >> Mysql

Dubbele invoer '0' voor sleutel 'PRIMARY'

Dit gebeurt wanneer u een primaire sleutel hebt, maar deze geen initialisatiewaarde geeft. De invoeging zelf veroorzaakt de duplicatie.

In uw geval komen er twee mogelijkheden bij u op:

  1. supp_id is de primaire sleutel en gedeclareerd als een getal. In oudere versies van MySQL denk ik dat de tekenreekswaarden stil worden geconverteerd naar getallen. Omdat de hoofdtekens letters zijn, is de waarde 0.

  2. Je hebt een andere id veld dat de primaire sleutel is, maar zonder waarde en niet gedeclareerd auto_increment .

BEWERKEN:

Ik vermoed dat je de volgende code wilt:

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

Enkele opmerkingen:

  • Meestal wil je varchar() in plaats van char() , tenzij je echt van veel spaties aan het einde van strings houdt.
  • Ik heb een unieke leveranciersnaam aan de tabel toegevoegd en de id aangegeven als een auto_increment .
  • Enkele aanhalingstekens zijn ANSI-standaard voor tekenreeksconstanten. MySQL (en sommige andere databases) staan ​​dubbele aanhalingstekens toe, maar er is geen reden om de standaard niet te gebruiken.


  1. Mysql SELECT binnen UPDATE

  2. Hoe de tabelwaardeparameter te WIJZIGEN

  3. Mysql commode engine MyISAM naar InnoDB

  4. CONTROLEER BEPERKING op meerdere kolommen