dedlfix: bestimmte Datensätze in andere Tabelle "verschieben"

Beitrag lesen

echo $begrüßung;

Mach's direkt auf der Datenbank - INSERT ... SELECT ist was du suchst ...

Also doch mit einem Sub-Select. Hm, mal sehn ob ich das hin kriege.

Nein, das ist kein Subquery im herkömmlichen Sinne. [*]

Natuerlich sollte das ganze in eine Transaktion gekapselt werden, [...]
Ja genau, daran dachte ich. [...]

Damit wirst du ein Problem haben, wenn dir die InnoDB-Storage-Engine nicht zur Verfügung steht oder aus anderen Gründen nicht eingesetzt werden kann (Fulltext-Index beispielsweise). Alternativen sind Table-Locking und Multiple-Table-DELETE. Lösche nach erfolgtem Kopieren die Datensätze aus dem Original, die in der Kopie vorhanden sind. Beachte, dass die Schlüssel über beide Tabellen eindeutig gehalten werden müssen. Dafür hat MySQL keinen Mechanismus[**]. Markieren als gelöscht bzw. als nicht mehr zu verwenden wäre eine weitere Variante ohne die Probleme der Mehrort-Speicherung beachten zu müssen.

[*] Das erkennt man unter anderem daran, dass keine Klammern drumrum müssen, die zwingender Bestandteil eines Subquerys sind. Selbst wenn das Ergebnis in einem Funktionsaufruf platziert werden soll, sind extra Subquery-Klammern notwendig: SELECT FUNCTION( (SELECT ...) )

[**] Vielleicht doch: mit einem Trigger eine Prüfung anstoßen. Aber das ist auch mit Vorsicht und Umsicht zu genießen. (Also, nicht der Trigger an sich, nur ihn für dieses Problem zu verwenden.)

echo "$verabschiedung $name";