AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Bedingtes Insert/Update geht das?
Thema durchsuchen
Ansicht
Themen-Optionen

Bedingtes Insert/Update geht das?

Ein Thema von Mavarik · begonnen am 20. Feb 2015 · letzter Beitrag vom 20. Feb 2015
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#1

Bedingtes Insert/Update geht das?

  Alt 20. Feb 2015, 15:22
Datenbank: MySQL • Version: 5.x • Zugriff über: Nativ
Hallo Zusammen!

Gibt es ein bedingtes Insert / Update?

Beispiel: Gegeben sei eine Datenbank mit 2 Feldern (Nr:Integer, D : Double)

Ich möchte einen Insert machen, wenn Nr in der Datenbank nicht enthalten ist und einen Update machen, wenn
Abs(D_alt-D_neu) > 0.02

Geht das in einem Execute Befehl?

Mavarik
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: Bedingtes Insert/Update geht das?

  Alt 20. Feb 2015, 15:24
Das müsste doch sowas sein...
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Bedingtes Insert/Update geht das?

  Alt 20. Feb 2015, 15:33
OK Falls Nr ein Key ist... könnte man ja machen... Aber was ist mit der Bedingung?

Abs(D_alt-D_neu) > 0.02
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Bedingtes Insert/Update geht das?

  Alt 20. Feb 2015, 15:55
http://stackoverflow.com/questions/4...f-false-insert
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
221 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Bedingtes Insert/Update geht das?

  Alt 20. Feb 2015, 16:38
evtl das hier:

http://dev.mysql.com/doc/refman/5.0/en/replace.html

oder

http://dev.mysql.com/doc/refman/5.0/...duplicate.html
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Bedingtes Insert/Update geht das?

  Alt 20. Feb 2015, 17:10
Bei beiden muss man aber aufpassen, ob auch genau das passiert, was man erreichen will!
  • REPLACE => Ist eine Kombination von DELETE und INSERT. Der alte Satz wird also wirklich gelöscht und der neue hinzugefügt.
  • ON DUPLICATE KEYS macht zwar ein bedingtes UPDATE wie gewünscht, allerdings mit dem Nebeneffekt, dass eine AUTOINC-Spalte einfach mal hochgezählt wird. Verhindern kann man dies durch ein Anpassen der Server-Einstellungen.
Beide Wege sind eben nicht falsch, haben aber ihre Eigenheiten
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: Bedingtes Insert/Update geht das?

  Alt 20. Feb 2015, 18:09
Schade, daß MySQL nicht sowas wie RETURNING kennt , dann ginge sowas
SQL-Code:
INSERT INTO Tabelle (Nr, D)
SELECT (:Nr, :D)
WHERE NOT (
  UPDATE Tabelle
  SET D = :D
  WHERE Nr = :Nr
    AND abs(D - :D) <= 0.02
  RETURNING true -- hier wird es schwer
)
UPDATE, wenn passend und wenn nicht TRUE, dann INSERT.


Alternativ muß man eben Beides machen.
SQL-Code:
UPDATE Tabelle
SET D = :D
WHERE Nr = :Nr
  AND abs(D - :D) <= 0.02;

INSERT INTO Tabelle (Nr, D)
SELECT (:Nr, :D)
WHERE NOT exists(SELECT *
                 FROM Tabelle
                 WHERE Nr = :Nr
                   AND abs(D - :D) <= 0.02);
(zuerst UPDATE und dann INSERT, damit das UPDATE das grade geINSERTe nicht nochmal sinnlos UPDATEd)
$2B or not $2B

Geändert von himitsu (20. Feb 2015 um 18:16 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz