php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.01.2006, 12:11  
Benutzer
 
Registriert seit: 12.10.2005
Beiträge: 67
argon
Standard #1216 - Cannot add or update a child row: a foreign key...

Hallo zusammen,
ich beschäftige mich seit ein paar Tagen mit SQL und kriege dieses Problem nicht gelöst:


Ich erzeuge zwei Tabellen:

1.Tabelle:
-----------
Code:
CREATE TABLE `content_main` (
  `cm_id` int(11) NOT NULL auto_increment,
  `cm_title` text NOT NULL,
   PRIMARY KEY (`cm_id`)
) TYPE=InnoDB;
2.Tabelle:
-----------
Code:
CREATE TABLE `content` (
  `cm_id` int(11) NOT NULL default '0',
  `c_quest` text NOT NULL,
  `c_answ` longtext NOT NULL,
   FOREIGN KEY (`cm_id`) REFERENCES `content_main` (`cm_id`),
   INDEX (`cm_id`)
) TYPE=InnoDB;
Ich möchte die beiden Tabellen referenzieren. In die 1. Tabelle "content_main"
schreibt er ohne Probleme den Wert rein.
Wenn ich nun in die 2.Tabelle Werte reinschreiben möchte bekomm ich
eine Fehlermeldung:

Code:
Fehler:
INSERT INTO `content` ( `cm_id` , `c_quest` , `c_answ` )
VALUES ( '0', 'Frag', 'Antw')

#1216 - Cannot add or update a child row: a foreign key constraint fails
Die Doku sagt:
Code:
Error: 1216 SQLSTATE: 23000  (ER_NO_REFERENCED_ROW)
Aber nun weiss ich trotzdem nicht wie ich die beiden Tabellen verknüpft bekomme,
kann im Moment mit der Fehlermeldung nicht viel anfangen.... kann mir bitte jemand weiterhelfen?


Gruß Argon
__________________
Argon
ist mit etwa 0,933 Volumen % das am häufigsten
in der Atmosphäre vorkommende Edelgas.
argon ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.01.2006, 12:39  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ich vermut einfach mal so ins blaue, dass es in der content_main keine passende (aber offenbar zwingend notwendige) Referenz auf content.cm_id = 0 gibt.
Was auch logisch wäre, denn die Referenz content_main.cm_id ist auto_increment. Der erste auto_increment Wert ist 1. 0 gibt es für diese Spalte nicht.

Ist aber geraten, ich hab keine Ahnung von diesem InnoDB-Konstrukt.
Zergling-new ist offline   Mit Zitat antworten
Alt 20.01.2006, 12:59  
Benutzer
 
Registriert seit: 12.10.2005
Beiträge: 67
argon
Standard

Zitat:
...Der erste auto_increment Wert ist 1. 0 gibt es für diese Spalte nicht.
....da magst Du recht haben.
hab nun versucht, händisch einen Wert für den Fremdschlüssel einzutragen, und es hat funktioniert.
Aber ich möchte ja nicht für jeden Datensatz, manuell, den Fremdschlüssel zuweisen....*grummel*.

Wie übergibt man den, PRIMARY KEY, automatisch, an die andere Tabelle, als ForeignKey? Irgendwo steckt da der "Wurm" drin...
__________________
Argon
ist mit etwa 0,933 Volumen % das am häufigsten
in der Atmosphäre vorkommende Edelgas.
argon ist offline   Mit Zitat antworten
Alt 20.01.2006, 13:16  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Meinst du mysql_insert_id()?
Oder inwiefern automatisch? Die Zuweisung musst du ja gerade du festlegen..
Zergling-new ist offline   Mit Zitat antworten
Alt 20.01.2006, 13:25  
Benutzer
 
Registriert seit: 12.10.2005
Beiträge: 67
argon
Standard

Zitat:
Meinst du mysql_insert_id()?
nein, das mein ich nicht.
Wenn ich in "content_main" etwas eintrage vergibt er automatisch eine ID, diese ID soll die andere Tabelle
als Fremdschlüssel verwenden. Wird aber leider nicht automatisch erstellt, also hab ich mal versucht die ID
von Tab.1 in Tab.2 einzutragen, einfach nur um zu testen. Macht er, ohne Fehler,
aber das hilft mir nun nicht wirklich weiter, denn die soll ja autom. erstellt werden.
__________________
Argon
ist mit etwa 0,933 Volumen % das am häufigsten
in der Atmosphäre vorkommende Edelgas.
argon ist offline   Mit Zitat antworten
Alt 20.01.2006, 13:45  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Da habe ich zuwenig Ahnung von der Materie. Aber du wolltest doch Fremdschlüssel Referenzen verwenden, die musst du dann eben auch explizit festlegen musst. Denke eher du hast einen Logikfehler. Aber wie gesagt, ich weiß es nicht, ich vermute es nur. Vielleicht haben andere mehr Ahnung davon.
Zergling-new ist offline   Mit Zitat antworten
Alt 20.01.2006, 13:50  
Benutzer
 
Registriert seit: 12.10.2005
Beiträge: 67
argon
Standard

vielleicht hast Du recht mit dem Logikfehler, ich schau mir alles nochmal an.
Danke für die Mühe...
__________________
Argon
ist mit etwa 0,933 Volumen % das am häufigsten
in der Atmosphäre vorkommende Edelgas.
argon ist offline   Mit Zitat antworten
Alt 20.01.2006, 15:02  
Benutzer
 
Registriert seit: 12.10.2005
Beiträge: 67
argon
Standard

Zitat:
Meinst du mysql_insert_id()?
Ich kannte die Funktion "mysql_insert_id()" nicht, und genau diese hat mir jetzt weitergeholfen....:wink:

Ich hab es jetzt so gelöst, dass ich die zu letzt benutzte ID, von Tab.1, in $lastID speichere ($lastID = mysql_insert_id() und diese dann mit INSERT in Tab.2 einfüge.
Naja, ist zwar nicht das was ich wollte, aber momentan find ich keine andere Lösung!

Danke für den Hinweis!

cu Argon
__________________
Argon
ist mit etwa 0,933 Volumen % das am häufigsten
in der Atmosphäre vorkommende Edelgas.
argon ist offline   Mit Zitat antworten
Alt 20.01.2006, 15:15  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

http://dev.mysql.com/doc/refman/5.0/...unique-id.html
Zitat:
INSERT INTO foo (auto,text)
VALUES(NULL,'text'); # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
VALUES(LAST_INSERT_ID(),'text'); # use ID in second table
Zergling-new ist offline   Mit Zitat antworten
Alt 20.01.2006, 15:30  
Benutzer
 
Registriert seit: 12.10.2005
Beiträge: 67
argon
Standard

Interessant, ich hab es über PHP gemacht, die SQL-Variante werde ich auch mal ausprobieren....thx
__________________
Argon
ist mit etwa 0,933 Volumen % das am häufigsten
in der Atmosphäre vorkommende Edelgas.
argon ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
php5 auf apache2 einrichten Server, Hosting und Workstations 4 24.08.2005 15:55
Problem: Cannot modify header information Alpha Centauri PHP Tipps 2005 11 25.04.2005 13:05
update auf php 5.0.4 robo47 Server, Hosting und Workstations 6 10.04.2005 19:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
cannot add or update a child row: a foreign key constraint fails, cannot add or update a child row, cannot add or update a child row a foreign key constraint fails, #1216 - cannot add or update a child row: a foreign key constraint fails, cannot add or update a child row:, \cannot add or update a child row: a foreign key constraint fails\, mysql error \cannot add or update a child row\ foreign key, \cannot add or update a child row\, cannot add or update a child row: a foreign key constraint fails (, cannot add or update a child row a foreign key constraint fails mysql, magento cannot add or update a child row: a foreign key constraint fails, error \'cannot add or update a child row: a foreign key constraint fails, cannot add or update child row, annot add or update a child row: a foreign key constraint fails, error: cannot add or update a child row: a foreign key constraint fails, mysql 1216, mysql cannot add or update a child row a foreign key constraint fails, mysql cannot add or update a child row: a foreign key constraint fails, \cannot add or update a child row: a foreign key constraint fails \, can not add or update child row

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:00 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.