Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 5275 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 ..
Ähnliche Inhalte
Datenbanken
MySQL bearbeiten - Rechte auf User ändern (6)

Frage von istike2 zum Thema Datenbanken ...

PHP
gelöst MySQL Update eines Datensatz mit Variable (4)

Frage von Jens4ever zum Thema PHP ...

Visual Studio
Herausfinden, ob PDF farbig oder sw ist (3)

Frage von ahstax zum Thema Visual Studio ...

Windows 7
gelöst Windows 7 bootet nach Update nicht mehr Insert Boot Media (13)

Frage von Akcent zum Thema Windows 7 ...

Neue Wissensbeiträge
Sicherheit

Millionen Euro in den Sand gesetzt?

(3)

Information von transocean zum Thema Sicherheit ...

Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Heiß diskutierte Inhalte
Firewall
gelöst Firewall Firmeneimsatz (22)

Frage von wiesi200 zum Thema Firewall ...

LAN, WAN, Wireless
Eine Netzwerkdose im Wechsel für zwei unterschiedliche Netze (11)

Frage von kartoffelesser zum Thema LAN, WAN, Wireless ...

Windows Server
ESXI Free Windows Server 2016 Datacenter aktivieren (10)

Frage von iDeathz zum Thema Windows Server ...

Windows Netzwerk
Ordner-Freigabe außerhalb der Domäne (9)

Frage von Remsboys zum Thema Windows Netzwerk ...