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.
thkx! MySQL 4 dus..nja daar kijk ik wel een keer naar wanneer dat een beetje de norm begint te worden.
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;
LOCK TABLES garbage WRITE, real WRITE;
INSERT INTO real (a,b,c) SELECT a,b,c FROM garbage;
DELETE FROM garbage;
UNLOCK TABLES;
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.
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