vor insert testen ob element schon vorhanden ist

S

supersucker

Foren Gott
abend zusammen,

wenn ich bisher vor einem insert testen wollte ob das entsprechende element schon in der datenbank vorhanden ist, hab ich vorher ein select gemacht und dann geschaut ob das resultset größer 0 ist, also in pseudocode:

Code:
select * from table where name = "xxx";
if (resultset == 0) {
    insert into ......
}

meine frage nun:

gibt es dafür clientseitig eine bessere möglichkeit? irgendwie kommt mir das reichlich plump vor....

serverseitig kann ich ja sowas machen wie
Code:
if not exists (select .....)  insert into....

aber clientseitig?

danke für alle tips!
 
hi

bei mysql gibts nen "insert ignore" - einfach mal tolle dumps machen in phpmyadmin.

da werden dann vorhanden/gleiche zeilen nicht nochmal reingehauen.

mfg frank
 
was willst du denn machen wenn der key schon vorhanden ist? das insert dann bleiben lassen oder die entsprechende row updaten? falls letzteres dann kannst du den insert modifier ON DUPLICATE KEY UPDATE verwenden
 
ja, es geht darum das insert dann bleiben zu lassen.

die sache ist die:

es sind drei aktionen, ob ich das nun mit jdbc, mysql/php oder sonst was mache:

- ein select auf das entsprechende element
- das testen des resultsets
- das einfügen des elements wenn es noch nicht vorhanden ist

ich dachte nun das es für so eine oft vorkommende problemstellung bestimmt eine möglichkeit gibt, das "in einem rutsch" zu machen.

google und seine freunde haben mich mittlerweile allerdings fast davon überzeugt, das es halt nicht anders geht....

oder hat noch jemand eine idee?
 
und was spricht dagegen das insert einfach zu machen. wenn das insert klappt ist's okay und wenn der key schon vorhanden ist dann kommt halt ein fehler zurück. den kann man ja dann ignorieren.
 
und was spricht dagegen das insert einfach zu machen.

nichts!

hätte es nur wesentlich ästhetistischer gefunden, wenn man sowas in einer query machen könnte, und nicht versucht was einzutragen und dann den fehler behandelt bzw. ignoriert.

werd mich damit wohl abfinden müssen.....:-)
 
Erstell ne Procedure , das ist doch eine elegante Lösung.
 
OK, hier ein Auschnitt aus meinem SQL-Backup von gestern:

Code:
INSERT DELAYED IGNORE INTO `book_ban` (`ban_ip`) VALUES ('123.123.123.123');

Damit sollten keine Duplikate auftreten.
 

Ähnliche Themen

Akonadi startet nicht mehr

dovecot und postfix Konfiguration Problem

Mit awk ein textfile parsen und SQL daraus erzeugen.

mysql_query + ausgabewert

Xubuntu - AVR32-linux crosscompile sqlite

Zurück
Oben