Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

MySQL herausfinden ob INSERT oder UPDATE

Frage Entwicklung Datenbanken

Mitglied: condor83

condor83 (Level 1) - Jetzt verbinden

09.01.2008, aktualisiert 14.01.2008, 5221 Aufrufe, 7 Kommentare

Hallo...

Ich versuch da etwas in MySQL zu Realisiern und hoffe auf eure Hilfe.

Ich möchte Daten (als beispiel a=1, b=2, c=3) in eine Tabelle schreiben aber es soll vorher (zb mit einer art IF anweisung) geprüft werden, ob es bereits einen Datensatz gibt, bei dem a=1 und b=2 . wenn ja dann soll in diesem Datensatz nur c mit UPDATE aktualisiert werden, wenn er nicht existiert soll er mit INSERT angelegt werden.

mit REPLACE kann ich glaub ich nicht arbeiten da ja a und b stimmen müssen werden

wie das ganze mit hilfe von php funktionieren würde weiß ich - ich brauch es aber in sql

ist das überhaupt möglich und wenn ja bin ich für jede hilfe dankbar

lg
condor
Mitglied: SlainteMhath
09.01.2008 um 09:39 Uhr
Moin,

welche Version von MySQL wird denn benutzt?

Ggfs. kanst Du das mit Stored Procedures abbilden, siehe http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html
Bitte warten ..
Mitglied: condor83
09.01.2008 um 11:11 Uhr
Danke erst mal für die Antwort!

ich arbeit derzeit local mit der 5er Version. Aber das projekt sollte irgendwann mal online gehen und derzeit hab ich noch keinen anbieter und weiß auch dessen version nicht. aber wenn die 5.1 notwendig ist werd ich mir schon einen entsprechenden Anbieter suchen.

Das mit den proceduren wär möglich - aber das würden dann eine große menge verschiedener gespeicherter prozeduren werden! wär es da sinnvoll die prozedur zu erstellen - ausführen und wieder löschen und für die nächste andere abfrage wieder erstellen - ausführen - löschen?

gibts vielleicht auch eine andere möglichkeit?
Bitte warten ..
Mitglied: pi314
11.01.2008 um 08:57 Uhr
Hi,

wie wär's mit einem Trigger auf die Tabelle?
Hier kannst du bei INSERT prüfen, ob es diesen Satz bereits gibt und ihn ggf. updaten.

Desweiteren wäre ein Unique-Constraint auf deine Spalten A und B sinnvoll.
Dann hast du bereits gesichert, dass es A und B nicht gleich sein können innerhalb deiner Tabelle.

In deinem Fall könnte die auch die MERGE-Anweisung helfen.
Hier kannst du dein Logik zum Einfügen abbilden.

Genaue Syntax für MySQL hab' ich nicht im Kopf
aber Google hilft da bestimmt

greetz,
pi
Bitte warten ..
Mitglied: condor83
11.01.2008 um 11:46 Uhr
Das mit dem Trigger muß ich mir mal genau Anschauen...

Ein Uniqe auf die Spalte A und B währe ja nicht sinnvoll denn es sollte folgendes möglich sein:

A | B | C
1 1 ?
1 2 ?
2 2 ?
2 1 ?

aber nicht

1 1 ?
1 1 ?

oder ist mit uniqu mehr möglich als ich weiß?

und MERGE hab ich in der MySQL-Dokumentation nur als Tabellentüp Speicherengine gefunden - ich glaub nicht das du das meinst.... - Wed mich da mal weiter umschauen
Bitte warten ..
Mitglied: pi314
11.01.2008 um 13:46 Uhr
Wenn du dein Unique-Constraint auf mehrere Spalten anlegst,
sind alle Möglichkeiten dieser Spalten eindeutig.


UC auf Spalte A:
01.
A   B   C 
02.
1   0   0 
03.
1   0   0 <-- nicht möglich
UC auf Spalten A+B:
01.
A   B   C 
02.
1   0   0 
03.
1   1   0 
04.
0   1   0 
05.
0   1   1 <-- nicht möglich
UC auf Spalten A+B+C:
01.
A   B   C 
02.
1   0   0 
03.
1   0   1 
04.
1   1   1 
05.
1   1   0 ... 
06.
1   1   0 <-- nicht möglich
Es ist also genau das möglich, was du willst - wenn ich dich richtig verstanden habe .
Ich schau mal, ob ich ein Bespiel für Merge in MySQL finde..

so long,
pi
Bitte warten ..
Mitglied: pi314
11.01.2008 um 14:33 Uhr
Habe noch eine weitere Möglichkeit gefunden: ON DUPLICATE KEY UPDATE
http://dev.mysql.com/doc/refman/5.1/de/insert-on-duplicate.html

Du muss dazu allerdings deine Spalten A und B als PK oder Unique deklarieren.


Merge ist im SQL2003-Standard deklariert:
01.
    MERGE INTO table_name USING table_name ON (condition) 
02.
    WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 ...] 
03.
    WHEN NOT MATCHED THEN INSERT column1 [, column2 ...] VALUES (value1 [, value2 ...]) 
Habe ein bisschen probiert, aber es nicht mit der gleichen Tabelle geschafft, dass da was vernünftiges rauskommt.

Also: verwende ON DUPLICATE KEY UPDATE

greetz,
pi
Bitte warten ..
Mitglied: condor83
14.01.2008 um 06:38 Uhr
hey super - danke - werd mir das genauer anschauen!!!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Suse
gelöst MySQL - mysqladmin-Pfad herausfinden? (2)

Frage von McLion zum Thema Suse ...

Microsoft Office
Access 2013 - Beispiel für mehrfach Update und Insert (2)

Frage von evolution zum Thema Microsoft Office ...

Windows 10
Kein Internet: Nach Windows-Update weltweit Computer offline (8)

Link von transocean zum Thema Windows 10 ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Heiß diskutierte Inhalte
Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...

Peripheriegeräte
Wlan stört Funkmaus (11)

Frage von Falaffel zum Thema Peripheriegeräte ...

Peripheriegeräte
gelöst USB Festplatte verliert Laufwerksbuchstabe (9)

Frage von cese4321 zum Thema Peripheriegeräte ...