Daten in Spalte hinzufügen

zino66

Neuer Benutzer
Beiträge
2
Hallo,

ich bin Anfänger. Bis jetzt habe ich alles irgendwie hinbekommen aber seit Stunden trete ich auf der Stelle und finde im Internet auch nix vernünftiges was passt.

In einer bestehenden Datenbank mit teilweise gefüllten Spalten möchte ich weitere Daten hinzufügen, will aber bisherige Daten nicht überschreiben oder löschen sondern wirklich nur nach einem Komma weitere Daten einfügen.

Mit INSERT INTO tabellenname (spalte) VALUES (, wert1, wert2, wert3); probiere ich die ganz Zeit schon rum, kriege aber einfach nichts gebacken.

Kann mir jemand sagen wie ich das hinkriege?
 
Werbung:
Du suchst ein UDATE:

Code:
postgres=# create table falsch (person_id int primary key, haustiere text);
CREATE TABLE
postgres=# insert into falsch values (1, 'Hund, Katze');
INSERT 0 1
postgres=# insert into falsch values (2, 'Regenwurm, Rollmops');
INSERT 0 1
postgres=# update falsch set haustiere = haustiere || ', Rollmops' where person_id = 1;
UPDATE 1
postgres=#

Aber Deine Idee ist falsch, besser:

Code:
postgres=# create table richtig(person_id int primary key, name text);
CREATE TABLE
postgres=# insert into richtig values (1, 'zino66');
INSERT 0 1
postgres=# create table person_haustier(person int references richtig, haustier text);
CREATE TABLE
postgres=# insert into person_haustier values (1, 'Hund');
INSERT 0 1
postgres=# insert into person_haustier values (1, 'Katze');
INSERT 0 1
postgres=# insert into person_haustier values (1, 'Rollmops');
INSERT 0 1
postgres=#

Werteliste mit Komma sind ein ABSOLUTES No-Go in Datenbanken.
 
Zuletzt bearbeitet von einem Moderator:
Und zu den Beispielen noch der einfache Hinweis:
Insert fügt neue Zeilen ein.
Update ändert bestehende Zeilen.

Beides geht für beliebige Spalten.

Insert überschreibt also niemals.
Update dagegen schon.

Im Gegensatz zu Insert einer Zeile kann bei Update eine Where Clause angegeben werden, die die betroffenen Zeilen einschränkt.
Diese Where Clause kann als Kriterium auch enthalten, dass vorhandene Spaltenwerte leer sein müssen, also in SQL "<spaltenname> is null"
Welche Spalten betroffen sind / sein sollen, wird in der Regel durch die Angabe eines Schlüsselwertes in der Where Clause erreicht, der Primary Key.
Es können aber auch beliebige andere Spalten- und Werte Kombinationen angegeben werden, um die betroffenen Zeilen für das Update einzuschränken.
 
Hallo, danke schon mal. Werde mich dann mal dranmachen.

Habe das bisher eigentlich so verstanden das UPDATE die bestehenden Einträge überschreibt aber ich will ja nur zusätzliche Daten bzw. Text einfügen. Sprich - nach dem bestehenden Text ein Komma setzen und dann weiterschreiben.
 
Ja, UPDATE überschreibt. Die Logik ist: nehme das, was jetzt drin steht, füge da etwas an, und überschreibe den bisherigen Text mit dem bisherigen + angefügtem Text.

Und noch einmal: das ist Bullshit. Was machst Du, wenn Dein Rollmops stirbt und dahinter aber noch die Scheißhausfliege als weiteres Haustier steht?
 
Werteliste mit Komma sind ein ABSOLUTES No-Go in Datenbanken.

Naja in 99,9% der Fälle stimmt das aber wenn du absolut fixe werte hast wie sagen wir z.B. einen Wert pro Wochentag dann kann man das machen. Das es irgendwann einen weiteren Wochentag geben wird oder einer wegfällt ist relativ unwahrscheinlich :)
Ob jetzt das Extrahieren der 7 Werte aus dem String mehr oder weniger performant ist wie eine weitere Tabelle hinzu zujoinen ist sicher nicht so einfach zu beantworten das es drauf ankommt wie man mit den Werten arbeitet.
 
Habe das bisher eigentlich so verstanden das UPDATE die bestehenden Einträge überschreibt aber ich will ja nur zusätzliche Daten bzw. Text einfügen. Sprich - nach dem bestehenden Text ein Komma setzen und dann weiterschreiben.

Datenbanken arbeiten Zeilenbasiert. Willst du in einer vorhandenen Zeile irgendwas ändern / hinzufügen -> Update
Willst du eine neue Zeile hinzufügen -> Insert
 
die Wahrheit ist noch etwas komplexer. In einer Umgebung mit mehreren parallel laufenden Transaktionen muß sichergestellt sein, daß jede Transaktion 'ihre' Sicht auf die Tabelle hat. Daher erfolgt auch bei einem Update ein Insert einer neuen Zeile...
 
Hallo, danke schon mal. Werde mich dann mal dranmachen.

Habe das bisher eigentlich so verstanden das UPDATE die bestehenden Einträge überschreibt aber ich will ja nur zusätzliche Daten bzw. Text einfügen. Sprich - nach dem bestehenden Text ein Komma setzen und dann weiterschreiben.
Du musst genau auf die Formulierung achten, Deine und unsere.
Ich habe Dir den Unterschied von Insert und Update erklärt. Beide arbeiten Zeilen basiert.
Dabei bin ich nicht auf einzelne Spalten eingegangen, also die Spalten einer Zeile. (Die mit einem Befehl INSERTed oder UPDATEd werden)

Wenn Du einen "bestehenden Eintrag" ergänzen willst, willst Du ihn nicht einfügen, kein Insert. Bleibt Update.
Update
Code:
Update <meineTabelle>
   set <meineSpalte> = concat(<meineSpalte>, <zusätzlicher Wert>)
 where <bedingung>
Das ist eigentlich recht einfach. Man muss nur aufpassen, ob der zusätzliche Wert etwa NULL ist.
 
Werbung:
Zurück
Oben