select und delete verbinden

worst_case

Benutzer
Beiträge
20
Hallo,

ich lese eine Tabelle aus ...

Code:
'SELECT * FROM write_sps WHERE plcname LIKE T1'

zugleich möchte ich, alles was ich auslese sofort in der Datenbank löschen, ohne eine zweite/separate sql/delete Anweisung,
Kann ich "select" und "delete" in "einer" Anweisung kombinieren ?

Gruß
worst_case
 
Werbung:
NO NO, das geht nicht bei MySQL. MariaDB kann so was **RETURNING** ist das Keyword

Code:
DELETE   
FROM mailing_list   
WHERE id = 24   
RETURNING email AS deleted_email;
 
Ist dir Syntax da gleich ?
so in etwas:

Code:
postgres=# create table demo (i int);
CREATE TABLE
postgres=# insert into demo select * from generate_series(1,20) s;
INSERT 0 20
postgres=# with deleted as (delete from demo where i < 10 returning *) select * from deleted; ;
 i 
---
 1
 2
 3
 4
 5
 6
 7
 8
 9
(9 rows)

postgres=#
 
Neee, 4 !!!!

Das Ganze muss in einer Transaktion passieren, sonst kann zwischen Select und Dekrete ein anderer Job was einfügen was dann auch gelöscht würde
 
Code:
postgres=# create table quelle(i int);
CREATE TABLE
postgres=# create table ziel(i int);
CREATE TABLE
postgres=# insert into quelle select * from generate_series(1,10) s;
INSERT 0 10
postgres=# begin;
BEGIN
postgres=*# insert into ziel select * from quelle where i < 6;
INSERT 0 5
postgres=*# delete from quelle where i < 6;
DELETE 5
postgres=*# commit;
COMMIT
postgres=# select * from quelle;
 i  
----
  6
  7
  8
  9
 10
(5 rows)

postgres=# select * from ziel;
 i 
---
 1
 2
 3
 4
 5
(5 rows)

postgres=#
 
Kann ich "select" und "delete" in "einer" Anweisung kombinieren ?
Was meinst du mit 4, vermutlich 4 Anweisungen ?
Deine erste Frage hatte ich so verstanden, dass Du genau weißt, warum Du eine Anweisung haben möchtest. Das wäre nämlich von allein eine einzige Transaktion, die wasserdicht ist.
Deine 2 Frage nach dem Hinweis von @BerndB deutet darauf hin, dass meine Vermutung nicht stimmt und Deine Beweggründe "bloß" Richtung sparsame Ressourcennutzung gehen. Das ist gut, aber nicht alles.

Wenn Du solche Statements einzeln abfeuerst, kannst Du ohne es zu merken, inkonsistente Daten produzieren (oder ausgeben). Das ist schlimmer, als ein Performanceproblem! Es mag einzelne Situationen geben, wo solch eine Inkonsistenz nicht stört, weil sie bei der nächsten Aktion wieder bereinigt wird (und eine neue Inkonsistenz hinterlässt), aber das will man gar nicht ausprobieren.
Transaktionen zu verstehen und zu verwenden, ist essentiell im DB Betrieb.

Also Daumen hoch von mir für @BerndB , schau Dir die Doku an, die @ukulele gepostet hat und die Skripte vom @akretschmer und versteh es.
 
OK, der Vorteil ist mir schon bewusst.

Ich habe es jetzt bei mir eingebaut, die 4 Zeilen 😉 haben auf Anhieb funktioniert.

Vielen Dank an alle !!!
 
Werbung:
OK, der Vorteil ist mir schon bewusst.

Ich habe es jetzt bei mir eingebaut, die 4 Zeilen 😉 haben auf Anhieb funktioniert.

Vielen Dank an alle !!!
Hast du kontrolliert ob du da nicht zwischen kommst. (SET autocommit=0;) und so...., denn im Normalfall ist jedes statement automatisch eine Transaction, da autocommit aktiv ist.

Gruß

Bernd

Handbuch

P.S. Danke auch an alle die meine "Kurzantwort" (nee 4) domumentiert haben.
 
Zurück
Oben