Primary key eines soeben neu erstellten Eintrages erhalten

Min-Max-Frager

Benutzer
Beiträge
6
Hallo,

ist es möglich, mittels 'INSERT...' (o.ä.) einen neuen Datensatz zu erstellen und im gleichen Zug den Primary key des soeben neu erstellten Datensatzes zu erhalten?

Erläuterung:
Diesen Primary key möchte ich nämlich dann in einer anderen Tabelle in einem bereits vorhandenen Datensatz einfügen ('UPDATE ...').

Ich benutze Win10 & VS14 (Expr.) & die aktuelle MariaDB .

Vielen Dank!
 
Werbung:
Dafür gibt es eine Funktion in MySQL, die die letzten id liefert, die in dieser Session vergeben wurde. In PostgreSQL ginge das so:

Code:
test=# create table master (id serial primary key, name text);
CREATE TABLE
test=*# create table detail(master_id int references master, detail_name text);
CREATE TABLE
test=*# insert into master (name) values ('name1');
INSERT 0 1
test=*# select currval('master_id_seq');
 currval
---------
  1
(1 Zeile)

Du machst also den Insert, fragst dann die vergebene ID ab (via currval()) und nutzt das für den Insert in die Detailtabelle. Einfacher geht es mit diesem Trick:

Code:
test=*# with id as (insert into master(name) values ('name2') returning id) insert into detail (master_id, detail_name) select id.id, 'detail name 2' from id;
INSERT 0 1

Statt 3 Befehle (Insert, select currval(), Insert) ist das alles nun in einem Befehl drin. Können aber nur bessere Datenbanken wie PostgreSQL.

Btw.:

Diesen Primary key möchte ich nämlich dann in einer anderen Tabelle in einem bereits vorhandenen Datensatz einfügen ('UPDATE ...').

Das ist ein prinzipieller Fehler. Wenn der Datensatz da schon drin ist - mit welchem Foreign Key? Einem falschen? FAIL! Mit gar keinem? FAIL!
 
Hallo,
(leider?) hat MariaDB die Funktion 'CURRVAL' nicht.
Trotzdem Danke: Das hat mich auf die Spur von 'LAST_INSERT_ID' gebracht:
MariaDB: LAST_INSERT_ID Function

Noch kurz zu dem Fail-Hinweis: Find ich prima, das auch gleich meine Randbedingungen geprüft wurden.
Aber: Mein Problem ist ähnlich wie mit (wertvollen) Weinflaschen (Tabelle 1) und diversen Freunden (Tabelle 2).
Die Flaschen sind zuerst vorhanden (= vorhandener Datensatz).
Jeder neue Freund (=neuer Datensatz mit dem Primary Key) bekommt entweder keine oder eine oder mehrere Weinflaschen.

Vielen Dank und liebe Grüße!
 
Jeder neue Freund (=neuer Datensatz mit dem Primary Key) bekommt entweder keine oder eine oder mehrere Weinflaschen.

Die Freunde kommen in eine Tabelle aller Freunde. In eine weitere Tabelle kommt, wer (Foreign Key auf die Freunde) welchen Wein (Foreign Key auf die Flaschen-Tabelle) und wie viele davon bekommt. Da ist keine Notwendigkeit, in dieser Tabelle Updates auf den Foreign Key - Spalten zu machen.
 
Werbung:
Zurück
Oben