MySQL, ID löschen, neu vergeben, geht, nicht UNIQUE ?
AhANiBoy
- datenbank
hi
In der Schule lernten wir,
dass eine ID einmalig ist in MySQL.
Auch wenn man einen Eintrag aus der Tabelle löscht,
und einen neuen Eintrag in die Tabelle macht,
wird es NIE die ID des gelöschten Eintrages annehmen.
Habe dazu nen Test gemacht und festgestellt dass kein Fehler kommt,
wenn man die ID nochmals vergibt,
die man zuvor löschte.
Bitte um eine Begründung!
Was läuft falsch?
Schönen Tag noch wünscht
Euer AhANiBoy
*** *** *** *** *** ***
mysql> SELECT * FROM idtest
;
Empty set (0.00 sec)
mysql>
mysql>
mysql> INSERT INTO idtest
VALUES ('', 'foo', 'bar');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO idtest
VALUES ('', 'max', 'mayer');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO idtest
VALUES ('', 'willy', 'tenner');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql>
mysql> SELECT * FROM idtest
;
+----+-------+--------+
| id | first | last |
+----+-------+--------+
| 1 | foo | bar |
| 2 | max | mayer |
| 3 | willy | tenner |
+----+-------+--------+
3 rows in set (0.00 sec)
mysql>
mysql>
mysql> INSERT INTO idtest
VALUES ('2', 'aaa', 'bbb');
ERROR 1062: Duplicate entry '2' for key 1
mysql>
mysql>
mysql>
mysql> DELETE FROM idtest
WHERE id='2';
Query OK, 1 row affected (0.00 sec)
mysql>
mysql>
mysql>
mysql> SELECT * FROM idtest
;
+----+-------+--------+
| id | first | last |
+----+-------+--------+
| 1 | foo | bar |
| 3 | willy | tenner |
+----+-------+--------+
2 rows in set (0.00 sec)
mysql>
mysql>
mysql>
mysql>
mysql> INSERT INTO idtest
VALUES ('2', 'aaa', 'bbb');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql>
mysql>
mysql> SELECT * FROM idtest
;
+----+-------+--------+
| id | first | last |
+----+-------+--------+
| 1 | foo | bar |
| 2 | aaa | bbb |
| 3 | willy | tenner |
+----+-------+--------+
3 rows in set (0.00 sec)
mysql>
你好 AhANiBoy,
Auch wenn man einen Eintrag aus der Tabelle löscht,
und einen neuen Eintrag in die Tabelle macht,
wird es NIE die ID des gelöschten Eintrages annehmen.
Das ist so nicht richtig, richtig waere: es wird nie automatisch die ID
des geloeschten Eintrags angenommen werden.
mysql> INSERT INTO
idtest
VALUES ('2', 'aaa', 'bbb');
Query OK, 1 row affected (0.00 sec)
Du legst hier die ID explizit fest. Das Constraint sagt aber nur: "Jede ID
muss Unique sein", nicht "Jede ID darf nur ein einziges mal verwendet
werden", deshalb ist das erlaubt und voellig ok so. Wenn du jetzt ein
Delete ausfuehrst und die ID von MySQL automatisch bestimmen lassen
wuerdest, waere 4 dabei herausgekommen, nicht 2.
再见,
克里斯蒂安
hi Christian Kruse
Jetzt versteh ich es!
Schön daß du zu so später Stunde noch eine Antwort geschrieben hast!
Dankende Grüße
AhANiBoy