Hallo Heiner,
bei mir läuft Server version: 5.1.46-community MySQL Community Server (GPL) unter Windows NT.
Versuche ich den FK manuell anzulegen, erhalte ich (als root in der DB - an den Rechten kann es also wohl nicht liegen) die Fehlermeldung
ERROR 1005 (HY000): Can't create table 'jverein.#sql-9b8_4' (errno: 121)
Wenn ich mir die Tabellen anschaue, sieht das wie folgt aus:
mysql> desc lehrgangsart;
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| bezeichnung | varchar(50) | NO | | NULL | |
| von | date | YES | | NULL | |
| bis | date | YES | | NULL | |
| veranstalter | varchar(50) | YES | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
5 rows in set (0.17 sec)
mysql> desc lehrgang;
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| mitglied | int(11) | NO | MUL | NULL | |
| lehrgangsart | int(11) | NO | MUL | NULL | |
| von | date | YES | | NULL | |
| bis | date | YES | | NULL | |
| veranstalter | varchar(50) | YES | | NULL | |
| ergebnis | varchar(50) | YES | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
mysql> show index from lehrgang;
+----------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+
| lehrgang | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | |
| lehrgang | 0 | id | 1 | id | A | 0 | NULL | NULL | | BTREE | |
| lehrgang | 1 | fkLehrgang1 | 1 | mitglied | A | 0 | NULL | NULL | | BTREE | |
| lehrgang | 1 | fkLehrgang2 | 1 | lehrgangsart | A | 0 | NULL | NULL | | BTREE | |
+----------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+
4 rows in set (0.03 sec)
Show innDB Status weist u.a. folgendes aus:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
100513 7:35:05 Error in foreign key constraint creation for table `jverein`.<result 2 when explaining filename '#sql-9b
8_e'>.
A foreign key constraint of name `jverein/fkLehrgang2` already exists. (Note that internally InnoDB adds 'databasename/' in front of the user-defined constraint name).
Note that InnoDB's FOREIGN KEY system tables store constraint names as case-insensitive, with the MySQL standard latin1_swedish_ci collation. If you create tables or databases whose names differ only in the character case, then collisions in constraint names can occur. Workaround: name your constraints explicitly with unique names.
------------
Für mich heißt das, der FK ist vorhanden. Das weist auch das generierte ER-Diagramm aus. Wird der Key doppelt angelegt? Darauf deuten auch die Postings hier hin:
http://dev.mysql.com/doc/refman/5.0/en/ ... codes.html
Wenn ich Dir noch irgendwie helfen kann, gib Bescheid.
Gruß
Knut
P.S.: Nach
alter table lehrgang drop FOREIGN KEY fkLehrgang2;
funktioniert
ALTER TABLE lehrgang ADD CONSTRAINT fkLehrgang2 FOREIGN KEY (lehrgangsart) REFERENCES lehrgangsart (id) ON DELETE CASCADE;
problemlos.