Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Fehler beim Einfügen eines Datensatzes

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von bassman, 24 April 2013.

  1. bassman

    bassman Neuer Benutzer

    Hallo ich möchte in eine Kindtabelle Datensätze einfügen, bekomme aber die Fehlermeldung:
    Code:
    Cannot add or update a child row: a foreign key constraint fails (`verein`.`mitglieder`, CONSTRAINT `jhgjh` FOREIGN KEY (`Familienstand_Nr`) REFERENCES `familienstand` (`F-Stand_ID`) ON DELETE NO ACTION)
    Nun weiß ich, dass der Fremdschlüssel als Primärschlüssel in der Vatertabelle vorkommen muss - tut er auch und trotzdem bekomme ich diese Fehlermeldung. Vielleicht liegt es an der Tabellendefinition ich poste sie hier mal:
    Kindtabelle
    Code:
    REATE TABLE `mitglieder` (
     `M-ID` int(11) NOT NULL AUTO_INCREMENT,
     `Vorname` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
     `Nachname` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
     `Ort_Nr` int(11) DEFAULT NULL,
     `Geburtsdatum` datetime DEFAULT NULL,
     `Geschlecht` varchar(1) CHARACTER SET utf8 DEFAULT NULL,
     `Familienstand_Nr` int(11) DEFAULT NULL,
     `Strasse` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
     `Hs-Nr` varchar(5) CHARACTER SET utf8 DEFAULT NULL,
     `Tel` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
     `Grundbeitrag` double DEFAULT NULL,
     PRIMARY KEY (`M-ID`),
     KEY `FamilienstandMitglieder` (`Familienstand_Nr`),
     KEY `PLZMitglieder` (`Ort_Nr`),
     KEY `jhgjh_idx` (`Familienstand_Nr`),
     CONSTRAINT `jhgjh` FOREIGN KEY (`Familienstand_Nr`) REFERENCES `familienstand` (`F-Stand_ID`) ON DELETE NO ACTION,
     CONSTRAINT `kjbkj` FOREIGN KEY (`Ort_Nr`) REFERENCES `ort` (`Ort_ID`) ON DELETE NO ACTION
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    Vatertabelle
    Code:
    CREATE TABLE `familienstand` (
     `F-Stand_ID` int(11) NOT NULL DEFAULT '0',
     `Familienstand` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
     PRIMARY KEY (`F-Stand_ID`),
     UNIQUE KEY `Familienstand` (`Familienstand`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1
    
    Irgendwie sehe ich den Fehler nicht. Ich habe versucht einen Datensatz mit der Familienstandnr 1 einzufügen.

    Wäre nett, wenn mir jemand einen Tipp geben könnte.

    Grüße
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Siehst Du es jetzt?

    Noch nicht?

    MyISAM.

    Code:
    mysql> create table vater (id int primary key) engine=myisam;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> create table kind (name text, fk int, constraint `xxx` foreign key(`fk`) references `vater`(`id`) on delete no action) engine=innodb;
    ERROR 1005 (HY000): Can't create table 'db183175_2.kind' (errno: 150)
    mysql> drop table vater;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> create table vater (id int primary key) engine=innodb;
    Query OK, 0 rows affected (0.07 sec)
    
    mysql> create table kind (name text, fk int, constraint `xxx` foreign key(`fk`) references `vater`(`id`) on delete no action) engine=innodb;
    Query OK, 0 rows affected (0.06 sec)
    
    
    Müll halt, MySQL, MyISAM, ... es gibt bessere Alternativen.


    Andreas
     
  3. ukulele

    ukulele Datenbank-Guru

    Ich dachte MyISAM legt gar keine Foreign Keys an?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Man kann das wohl nicht mixen, der TE hatte ja seine Vatertabelle als MyISAM erstellt. Eigentlich sollte da schon das erstellen der Kindtabelle scheitern, aber vielleicht prüft MySQL das auch nur Mittwochs zwischen 8 und 9 Uhr ...
     
  5. bassman

    bassman Neuer Benutzer

    Hallo,

    danke für den Hinweis. Zur Erklärung: ich habe die Tabellen nicht selbst erstellt, sondern mit irgendeinem Tool aus Access heraus exportiert. Das Export-Programm hat das wohl selbst einfgefügt, deshalb ist mir das nicht aufgefallen. Muss ich wohl ein alternatives Programm suchen, oder manuell die Definition anpassen.

    Vielen Dank für eure Hilfe.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden