Datensatz updaten bzw hinzufügen

MySQL, PostgreSQL, SQLite
alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover

Datensatz updaten bzw hinzufügen

Post by alexander newald » 2003-07-13 00:12

Hallo,

ich suche eine Möglichkeit folgendes zu realisieren:

In eine Tabelle table mit den Spalten id (char(8 )) und value (int(8 )) sollen einträge eingefügt werden, bzw wenn die id schon vorhanden ist, der Eintrag für value erhöt werden.

Also

1. Tabelle leer
2. Werte 20030712 - 10 einfügen
:idea: -> INSERT INTO table VALUES ('20030712','10');
3. Werte 20030712 - 20 einfügen
:idea: -> UPDATE table SET value = value + 20 WHERE id = '20030712'
4. Werte 20030713 - 5 einfügen
:idea: -> INSERT INTO table VALUES ('20030713','5');

Eigendlich kein Problem, allerdings soll die mySQL Query automatisch erkennen, welche Art von :idea: ausgeführt werden muss und das möglichst in einer Zeile... :wink:

Geht das und wenn ja - wie?

lunasun
Posts: 10
Joined: 2003-07-16 10:47

Re: Datensatz updaten bzw hinzufügen

Post by lunasun » 2003-07-21 16:13

HI
So richtig habe ich deine Frage nicht verstanden aber ich glaube ich weiss was du willst. :)

Also in einem Query gehen nur bedingt kontroll anweisungen. Die hier aber keine verwendung finden. Du wirst mit einer kleinen if#else variante leben müssen. Wie kann eigendlich eine id doppelt vorkommen? ist die bei dir nicht auto_increment?

luna

alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover

Re: Datensatz updaten bzw hinzufügen

Post by alexander newald » 2003-07-30 21:48

Hier die Lösung:

Code: Select all

set @w = 0;
select @w := value from table where id = "20030713";
delete from table where id = "20030713";
insert into table values ("20030713", @w + 20);

simcen
Posts: 333
Joined: 2003-02-12 14:35
Location: Bern, Schweiz

Re: Datensatz updaten bzw hinzufügen

Post by simcen » 2003-07-30 23:15

LunaSun wrote:Wie kann eigendlich eine id doppelt vorkommen? ist die bei dir nicht auto_increment?

luna
Es kommt drauf an ob die Spalte ein Primary Key ist, nicht ein auto_increment. Auto_Increment erhöht den Wert nur wenn du beim einfügen eines Datensatzes keinen Wert der Spalte zuweist. Theoretisch kann eine Spalte als auto_increment alles gleiche Werte haben. Auto_Increment muss ja nicht immer nur für die Datensatzbezeichnerspalte ( 8O ) gebraucht werden.