2017-12-30 30 views
0

meiner DB aussieht: DannMySql kann nicht Wert aus einer Tabelle in der anderen

DB

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; 

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ; 
USE `mydb` ; 

CREATE TABLE IF NOT EXISTS `mydb`.`contacts` (
    `idcontact` INT NOT NULL AUTO_INCREMENT, 
    `phone` VARCHAR(45) NULL, 
    `email` VARCHAR(45) NULL, 
    PRIMARY KEY (`idcontact`)) 
ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `mydb`.`adresses` (
    `idadress` INT NOT NULL AUTO_INCREMENT, 
    `city` VARCHAR(45) NULL, 
    `street` VARCHAR(45) NULL, 
    `street_number` VARCHAR(45) NULL, 
    PRIMARY KEY (`idadress`)) 
ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `mydb`.`employees` (
    `idemployee` INT NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(45) NULL, 
    `surname` VARCHAR(45) NULL, 
    `adresses_idadress` INT NOT NULL, 
    `contacts_idcontact` INT NOT NULL, 
    PRIMARY KEY (`idemployee`), 
    INDEX `fk_employees_adresses_idx` (`adresses_idadress` ASC), 
    INDEX `fk_employees_contacts1_idx` (`contacts_idcontact` ASC), 
    CONSTRAINT `fk_employees_adresses` 
    FOREIGN KEY (`adresses_idadress`) 
    REFERENCES `mydb`.`adresses` (`idadress`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_employees_contacts1` 
    FOREIGN KEY (`contacts_idcontact`) 
    REFERENCES `mydb`.`contacts` (`idcontact`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

Ich ist in Tabellen einfügen und Kontakte wie diese Adressen : insert into mydb.contacts(phone,email) values ('123123123','[email protected]'); insert into mydb.adresses(city,street,street_number) values ('London','28th Street','13');

And next I want to insert into employees: insert into mydb.employees(name,surname) values ('Jack','Reaper');

Und ich erhalte diesen Fehler:

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (mydb . employees , CONSTRAINT fk_employees_adresses FOREIGN KEY (adresses_idadress) REFERENCES adresses (idadress) ON DELETE NO ACTION ON UPDATE NO ACTION)

Was muss ich tun, um das zu reparieren?

+0

Sie haben eine Tabelle 'Angestellte' mit den Feldern' adressen_iddress' und 'contacts_idcontact' erstellt und festgelegt, dass sie *** nicht' NULL' sein können. Also, wenn Sie versuchen, einen neuen Datensatz ohne eine Adresse oder einen Kontakt hinzuzufügen, wird es natürlich fehlschlagen. Möchten Sie 'NULL' Werte für diese beiden Felder zulassen oder nicht? Entfernen Sie entweder den Wert "NOT NULL" aus der Tabellendefinition, oder geben Sie beim Einfügen neuer Datensätze Werte für die Adresse und den Kontakt an. – MatBailie

+0

Ich hoffe, Sie haben nicht den Eindruck, dass fremde Schlüssel irgendwie Spalten in 1 Tabelle von einer anderen Tabelle ausfüllen werden. –

Antwort

0

In Ihrer Tabelle Insert on employee müssen Sie auch address_isaddress und contact_idcontact angeben. Ohne das wird der Einsatz nicht durchgehen.

0

Ich möchte Wert nehmen von adresses-> idadress zu Mitarbeiter-> adresses_idadress und von Kontakte-> idcontact zu Mitarbeiter-> contacts_idcontact. Ich weiß nicht, warum diese Werte nicht automatisch übernommen werden.

+0

Oh, Sie haben den Eindruck, dass fremde Schlüssel Daten von anderen Tabellen einsaugen. Nicht so sind sie Einschränkungen. –

Verwandte Themen