AllesMeins: MySQL - seltsames Verhalten bei foreign key constraints

Hi,

ich habe mich entschlossen zwei meiner Tabellen per Constraint zu verknüpfen. Ich habe dies schon ein paar mal gemacht und bisher hat es immer einwandfrei funktioniert. Doch dieses mal klappt das ganze nicht. Der Constraint lässt sich problemlos einrichten (und wirft bei bereits bestehenden Einträgen auch keine Fehler), mir gelingt es aber nicht etwas neues einzutragen. Ich erhalte immer die fehlermeldung, das der Constraint fehlgeschlagen wäre, auch wenn der passende Wert ganz sicher in der anderen Tabelle ist. Sprich wahrscheinlich ist es ein ganz dummer Fehler und ich sehe den Wald vor lauter Bäumen nicht... Hier mal mein Setup:

--
-- Table structure for table randname\_translation
--

CREATE TABLE IF NOT EXISTS randname\_translation (
  originalName varchar(255) NOT NULL,
  neuerName varchar(255) NOT NULL,
  PRIMARY KEY (originalName),
  UNIQUE KEY neuerName (neuerName)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table user
--

CREATE TABLE IF NOT EXISTS user (
  userName varchar(255) NOT NULL,
  insertTime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (userName)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Constraints for dumped tables
--

ALTER TABLE randname\_translation
  ADD CONSTRAINT randname\_translation\_ibfk\_1 FOREIGN KEY (neuerName) REFERENCES userTitel (userName) ON DELETE CASCADE ON UPDATE CASCADE;

Wenn ich nun soetwas mache wie dieses hier:
INSERT INTO user (userName) VALUES ('test');
INSERT INTO randname_translation (originalName,neuerName) VALUES ('irgendwas','test');
dann wird der Wert korrekt in die Tabelle "user" geschrieben, für den zweiten Query erhalte ich aber einen MySQL fehler:
#1452 - Cannot add or update a child row: a foreign key constraint fails (diplomarbeit.randname\_translation, CONSTRAINT randname\_translation\_ibfk\_1 FOREIGN KEY (neuerName) REFERENCES userTitel (userName) ON DELETE CASCADE ON UPDATE CASCADE)

Verwende ich für den zweiten Query statt 'test' einen Wert der bereits vor dem Anlegen des Constraints in der Tabelle war, so funktioniert das ganze einwandfrei.

Bitte helft mir auf die Sprünge. Was übersehe ich hier, ich steh schon seit Stunden offensichtlich total auf dem Schlauch...

  1. Hi,

    CREATE TABLE IF NOT EXISTS randname\_translation (
      originalName varchar(255) NOT NULL,
      neuerName varchar(255) NOT NULL,
      PRIMARY KEY (originalName),
      UNIQUE KEY neuerName (neuerName)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    CREATE TABLE IF NOT EXISTS user (

    Die Tabelle ist doch unerheblich, hat mit dem Constraint nichts zu tun.

    ALTER TABLE randname\_translation
      ADD CONSTRAINT randname\_translation\_ibfk\_1 FOREIGN KEY (neuerName) REFERENCES userTitel (userName) ON DELETE CASCADE ON UPDATE CASCADE;

    Wie sieht die Tabelle userTitel aus? Die zeigst Du leider nicht, dafür die für den Constraint vollkommen irrelevante Tabelle user.

    INSERT INTO user (userName) VALUES ('test');
    INSERT INTO randname_translation (originalName,neuerName) VALUES ('irgendwas','test');
    dann wird der Wert korrekt in die Tabelle "user" geschrieben, für den zweiten Query erhalte ich aber einen MySQL fehler:
    #1452 - Cannot add or update a child row: a foreign key constraint fails (diplomarbeit.randname\_translation, CONSTRAINT randname\_translation\_ibfk\_1 FOREIGN KEY (neuerName) REFERENCES userTitel (userName) ON DELETE CASCADE ON UPDATE CASCADE)

    Wo hast Du denn den Eintrag in der Tabelle userTitel gemacht?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Ups, das ist aber echt peinlich ;)
      Danke fürs drübergucken, ich hab das echt nicht gesehen! Vor allem habe ich den Constraint zum Testen dreimal wieder neu angelegt und muss dabei wohl jedesmal die falsche Tabelle gewählt haben. Mit der richtigen funktioniert es ;)

      Danke nochmal

      Marc