codehunter
Goto Top

MySQL Daten in Tabelle A und AUTOINCREMENT-Feld als Schlüsselgenerator in Tabelle B

Hallo!

Ich möchte eine Tabelle (B) mit einer einzigen Spalte, welche ein AUTO_INCREMENT ist, als Schlüsselgenerator für eine andere (Daten-)Tabelle (A) verwenden. In der Tabelle A ist die Schlüsselspalte also keine AUTO_INCREMENT sondern lediglich UNIQUE. Durch die Methode möchte ich Schlüsselkollisionen vermeiden, weil sich unterschiedliche Datenobjekte über unterschiedliche Datentabellen verteilen, deren Schlüssel aber global eindeutig sein sollen. Das Grundprinzip funktioniert auch soweit. Nur finde ich es etwas lästig, die ganze Schlüssel-Erzeugung quasi "zu Fuß" zu machen wenn ich in den Datentabellen neue Datensätze anlegen will. Also erst neuen Datensatz in der AUTO_INCREMENT-Tabelle anlegen, dann LastInsertId von dort abfragen und in die Datentabelle einfügen.

Gibt es eine Möglichkeit, in einem Rutsch in Tabelle B einen Datensatz einzufügen und von dort die LastInsertId gleich in Tabelle A zu schreiben? Also in einem Query?

Grüße
Cody

Content-Key: 264754

Url: https://administrator.de/contentid/264754

Printed on: April 19, 2024 at 19:04 o'clock

Member: Gersen
Gersen Feb 27, 2015 updated at 11:34:51 (UTC)
Goto Top
Hallo,

anstelle der "Schlüsselverwaltungstabelle" die globale Option "auto_increment_increment" in my.cnf (auf die Anzahl der betroffenen Tabellen) zu setzen, ist für Dich keine Option?

Wenn nicht, könnten hier oder hier ein paar Anregungen für Dich stehen.

Gruß,
Gersen
Member: Codehunter
Codehunter Feb 27, 2015 at 15:10:09 (UTC)
Goto Top
Hallo!

Die my.cnf ist nicht wirklich eine Option. Bei den von mir gehosteten Anwendungen vielleicht, aber nicht bei denen, die Kundenseitig auf billigen Shared-Webspaces gehostet werden. Die kommen ja an ihre my.cnf nicht ran.

Ich denke ich habe jetzt aber eine praktikable Lösung per Before-Insert-Trigger gefunden. Den muss ich zwar für jede Tabelle welche den globalen Schlüssel verwendet, separat erstellen. Aber unterm Strich halte ich den Anwendungscode dadurch von Overhead frei.

Grüße
Cody
Member: Alchimedes
Alchimedes Feb 27, 2015 at 16:55:02 (UTC)
Goto Top
Hallo ,

Ich möchte eine Tabelle (B) mit einer einzigen Spalte, welche ein AUTO_INCREMENT ist, als Schlüsselgenerator für eine andere (Daten-)Tabelle (A) > verwenden In der Tabelle A ist die Schlüsselspalte also keine AUTO_INCREMENT sondern lediglich UNIQUE. Durch die Methode möchte ich
Schlüsselkollisionen vermeiden, weil sich unterschiedliche Datenobjekte über unterschiedliche Datentabellen verteilen, deren Schlüssel aber global
eindeutig sein sollen.

die Auto_Increment funktion gibt es ja genau aus diesem Grund.Wichtig ist hier natuerlich den Primarykey zu setzen.
Was fuer ne Datenbank nutzt Du ? myisam, InnoDB ?

Gruss