AhANiBoy: MySQL, ID löschen, neu vergeben, geht, nicht UNIQUE ?

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>

  1. 你好 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.

    再见,
    克里斯蒂安

    --
    Fatal! Ich kann kein Reserve-Offizier mehr sein!
    1. 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