Hony%
Datenbank-Guru
- Beiträge
- 450
Wir brauchen als erstes zwei einfache Tabellen. Eine mit Fremdschlüsselbeziehung.
Werte in table1 einzufügen ist natürlich problemlos möglich. Die dort enthaltenen Werte in table2 ebenso.
MySQL macht also was es soll. Aber MySQL wäre nicht MySQL wenn sich das nicht umgehen ließe.
Wenn man die Prüfung wieder einschaltet stört es MySQL aber nicht im geringsten, dass die Daten nicht den Bedingungen entsprechen:
Die Datenbank muss man lieben!
Code:
mysql> CREATE TABLE table1 (id INT NOT NULL, PRIMARY KEY(id));
Query OK, 0 rows affected (0.06 sec)
mysql> CREATE TABLE table2 (fkid INT NOT NULL, FOREIGN KEY (fkid) REFERENCES table1(id));
Query OK, 0 rows affected (0.11 sec)
Werte in table1 einzufügen ist natürlich problemlos möglich. Die dort enthaltenen Werte in table2 ebenso.
Code:
mysql> INSERT INTO table1 VALUES (1);
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO table2 VALUES (1);
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO table2 VALUES (2);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`table2`, CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`fkid`) REFERENCES `table1` (`id`))
MySQL macht also was es soll. Aber MySQL wäre nicht MySQL wenn sich das nicht umgehen ließe.
Code:
mysql> SET FOREIGN_KEY_CHECKS = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO table2 VALUES (2);
Query OK, 1 row affected (0.05 sec)
Wenn man die Prüfung wieder einschaltet stört es MySQL aber nicht im geringsten, dass die Daten nicht den Bedingungen entsprechen:
Code:
mysql> SET FOREIGN_KEY_CHECKS = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * from table1;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
mysql> SELECT * from table2;
+------+
| fkid |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.05 sec)
Die Datenbank muss man lieben!