[MySQL] record verplaatsen naar andere tabel

Pagina: 1
Acties:

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Ik heb in mijn db alle tabellen dubbel uitgevoerd, waarbij de ene tabel steeds een prullenbak-versie is van de andere (dus alleen de naam is anders). Is er een MySQL commando waarmee ik zo'n record in 1 keer kan verplaatsen ipv met meerde queries?

Verwijderd

Nee. Zorg dat je MySQL 4 draait, zodat je transacties kan gebruiken om je insert en delete queries.

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
thkx! MySQL 4 dus..nja daar kijk ik wel een keer naar wanneer dat een beetje de norm begint te worden.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je kan je tables locken.

LOCK TABLES garbage WRITE, real WRITE;
INSERT INTO real (a,b,c) SELECT a,b,c FROM garbage;
DELETE FROM garbage;
UNLOCK TABLES;

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
ik snap niet wat hierboven gebeurt?

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ik kopieerde je prullenbak terug naar je andere tabel als voorbeeld (undo zeg maar)

Je kan het niet met 1 query doen, je hebt dus een insert+delete paar nodig. Maar het is vervelend als er na je insert, een ander process net een nieuw record insert, en jij dan je tabel wist. Dan verlies je data.

Dus...

Eerst lock je je twee tabellen voor write, elke ander process dat nu wil lezen of schrijven naar/van die twee krijgt eventjes geen toegang. Dat is die eerste query.

Dan kopieer je (een deel van) de oude tabel naar de nieuwe met die tweede query.

Daarna maak je je oude tabel leeg met de 3e.

En finally, unlock je je tabellen weer zodat andere processen weer fijn data kunnen lezen/updaten enz. Die overigens netjes hierop wachten, merk je niks van.

Je moet alleen geen persistent connects gebruiken met locks, kan je database op hangen als het fout gaat.
Pagina: 1