Thread Insert Into... On Duplicate Key Update... (20 answers)
Opened by rosti at 2012-05-25 20:39

rosti
 2012-05-25 23:25
#158623 #158623
User since
2011-03-19
3219 Artikel
BenutzerIn
[Homepage]
user image
Postgresql und oracle bieten von der Sache her Ähnliches, nur mit einem anderem Syntax. Es geht mir auch um die Sache an sich, nämlich darum, die Entscheidung der DB-Engine zu überlassen, was in den meisten Fällen möglich ist.

In den mir vorliegenden Fällen (MySQL) ist das sogar immer möglich, allerdings könnte ich dann auch ein 20-DIN-A4-Seiten Script wegschmeißen; ja ich habe mich auch dazu verleiden lassen, es so "unsittig" zu machen ;)

Also, von der Sache her werden IDs nur dann gebraucht, wenn in weiteren, verknüpften Tabellen neue Datensätze hinzukommen, was bei einem Update in Fakt nicht der Fall ist, da gibt es keine neuen Datensätze, die neu referenziert werden müssen, denn die Referenzierung ist ja schon vorhanden.

Pq, ja, die Last_Insert_ID/MySQL ist eine feine Sache, in MySQL die referenzielle Integrität herzustellen und wenn das Feld in jeder Tabelle dann auch noch 'id' heißt, gehen Joins mit Using(id) ;)

Tatsächlich gibt es auch bei mir Codestücken wie:
Code (perl): (dl )
1
2
3
4
5
my $id = $self->insert_foo($hunt) || $self->update_foo($hunt);

# $hunt ist eine vogelwilde Datenstruktur mit allen 
# Daten, die von einer DB zu einer anderen DB übertragen werden
# Idee: bless $hunt, 'InsertClass';


Wobei ich beim Überarbeiten von (eigenen oder fremden) Code oftmals feststellen muss, dass die $id nicht immer gebraucht wird, wenn Tabellen einen Unique Key hätten...

Postgresql bringt wieder andere Möglichkeiten mit (Stichwort Cascade), aber da bin ich schon ne Weile raus.

Zurück zu MySQL, die Last_Insert_Id abzufragen ist eine einfache Möglichkeit, herauszufinden, ob ein Insert stattgefunden hat, bei einem Update liefert diese Anfrage eine 0. Hier gilt es jedoch aufzupassen, dass jeder Prozess eine eigene DBH-Session hat, sonst geht auch das schief (alles schon gesehen und erlebt *G).

Beim Scripten mit DB-Zeugs gibts immer was dazuzulernen... so meine Nachtgedanken für heute.

Viele Grüße an Alle!!
Und ein schönes Pfingstwochenende!

PS: Endlich Feierabend, war ne harte Woche ;)
Last edited: 2012-05-25 23:58:33 +0200 (CEST)

View full thread Insert Into... On Duplicate Key Update...