Schoon de tabel ("FLUSH")

Status
Niet open voor verdere reacties.

Vanderploeg

Gebruiker
Lid geworden
3 feb 2007
Berichten
201
Ik gebruik MySQL en phpMyAdmin. In phpMyAdmin vind ik bij "Tabel onderhoud" de optie "Schoon de tabel ("FLUSH")".
Kan iemand mij op een eenvoudige manier uitleggen wat deze optie met een tabel doet?

Via Google ben ik uren aan het zoeken geweest om hier uitleg over te krijgen, maar de uitleg die gegeven werd was steeds te summier of te onduidelijk voor mij. :confused: Als er bijvoorbeeld moeilijke woorden worden gebruikt ben ik al gauw het spoor bijster.

Toch vind ik het tabel-onderhoud wel belangrijk. Soms doe ik handmatig iets aan onderhoud, maar bij complexe tabellen met veel records kan dat erg tijdrovend zijn. Ik wil dus gewoon graag weten of deze optie nuttig voor mij kan zijn of niet. En wat er met mijn tabel gebeurt als ik het uitprobeer. Misschien kan ik heel veel plezier van deze optie hebben als ik het eenmaal snap. :)
 
Dit betekent dat de tabel leeg leeg wordt gemaakt van de gegevens die ernin staan. Of te wel: alle records worden verwijderd.
De tabelbeschrijving en indeling blijven wel behouden.
 
Bedankt voor deze reactie, silkcom! :)

Is FLUSH dus gelijk aan TRUNCATE? Want met TRUNCATE worden de records van de tabel gewist, terwijl de structuur van de tabel blijft. Ik heb TRUNCATE al heel vaak toegepast. Het werkte altijd.

Maar ik heb FLUSH toegepast op een proeftabel. (Als die verminkt zou worden, wis ik hem gewoon). Maar alle 23 records bleven bestaan! Ik zag geen verschil met de tabel zoals die eerst was.... Dus ik snap het nog steeds niet.... :eek:
 
:confused:

Foutje van mij. Ik dacht dat met FLUSH inderdaad de tabellen werden geleegd. Op het mainframe waarop ik gewerkt heb, werkte dat wel zo.
In MySql geldt het volgende:
Tijdens het uitvoeren van een query, worden de resultaten eerst in een intern stuk werkgeheugen geplaatst en dan vanuit dit interne stuk werkgeheugen, doorgegeven aan het programma dat de gegevens wenst. Wanneer je nu weer dezelfde query uitvoert, kijkt MySql eerst of dit eerder is uitgevoerd en de gegevens aanwezig zijn in het interne stuk werkgeheugen. Zo ja, dan worden de gegevens uit dit interne stuk wekgeheugen gehaald en doorgegeven aan de nieuwe query.
Dit kan dus tot gevolg hebben dat je niet de nieuwste gegevens te zien krijgt indien je twee keer achter elkaar dezelfde query uitvoert. Als tussen de twee queries door een ander de gegens zijn gewijzigd, zal in de meeste gevallen MySql er zorg voor dragen dat jij toch de juiste (lees: gewijzigde) gegevens te zien krijgt.
In die gevallen waarin het allemaal heel snel gaat, of indien het interne stuk werkgeheugen vol raakt, kan een FLUSH-commando dit werkgeheugen leeg maken.

Ik hoop dat dit toch wel technische verhaal meer zicht op de zaak geeft.
 
Dit is inderdaad vrij duidelijk. Dus waarschijnlijk is er helemaal niets veranderd aan mijn proeftabel waarop ik het FLUSH-commando heb losgelaten. Klopt dat?

In zekere zin is het FLUSH-commando te vergelijken met de Vernieuwen (F5)-functie bij het gebruik van internet. Klopt dat ook?

En hoe lang blijft dat werkgeheugen intact, waar MySQL gegevens uit haalt?

Ik neem aan dat dat werkgeheugen weg is wanneer ik phpMyAdmin verlaat en dan weer opstart. Klopt dat ook?
 
Je moet het vergelijken met het verwijderen van cookies, niet met het opnieuw opvragen van de pagina.

mySQL houdt een cache bij van queries en antwoorden. Als jij dus opvraagt:

[sql]
SELECT *
FROM tabel
WHERE conditie = 'true'
[/sql]

Dan onthoudt hij die query en de resultaten. Voer je kort daarna nog een keer dezelfde query uit, dan doet hij de query niet opnieuw, maar geeft hij de resultaten terug die hij de vorige keer had.

Als je tussendoor de gegevens wijzigde, maar het is heel erg druk op de server, kan het dan zijn dat de wijziging nog niet is doorgevoerd, en je dus de oude gegevens krijgt ipv de nieuwe.

Als je FLUSH doet worden dus al deze ge-cachte gegevens opgeslagen. Hoe lang die cache bewaard blijft weet ik niet, maar volgensmij gaat het over sessies heen dus ook als je je pagina sluit zal het niet gebeuren.

Overigens heb je FLUSH waarschijnlijk niet nodig; je systeem werkt ook perfect zonder.
 
Heel hartelijk dank voor alle reacties!
Ik heb nog 3 vragen:

1. Frats schreef: "Als je FLUSH doet worden dus al deze ge-cachte gegevens opgeslagen."
Bedoelde je misschien: "Als je FLUSH doet worden dus al deze ge-cachte gegevens gewist."? Want ge-cachte gegevens zijn toch per definitie al opgeslagen? Een cache is toch een soort kopie?

2. Frats schreef ook: "WHERE conditie = 'true'."
Bedoelde je misschien het Engelse "condition" in plaats van het Nederlandse "conditie"? Want ik las dat "condition" een gereserveerde term is, net als "SELECT" en "WHERE".

3. Evenwel kon ik er niet achter komen (na weer meer dan een uur zoeken) wat "condition = 'true' " betekent. Misschien komt dat wat dom over. Maar ik kan met MySQL-databases vrijwel alles doen wat ik wil. Alleen gebruik ik mijn eigen terminologie. Desnoods krijg ik met 5 commando's voor elkaar wat in een commando ook zou kunnen, als ik dat ene commando zou kennen!

Als ik de forums op internet nakijk lees ik soms dat de een tegen de ander zegt: "Ga maar een cursus volgen." Maar ik heb hier thuis een naslagwerk over PHP5 en MySQL van meer dan 1000 bladzijden. Toch staat het woord "condition" niet in de index! Zelfs "true" staat niet in de index, alleen "truecolor". In de leerboeken die ik zelf heb doorgewerkt wordt (naar ik mij herinner) ook niets gezegd over "condition". En misschien kan ik mijn programmeerwerk aanzienlijk verbeteren, als ik dit ook zou snappen!
 
Laatst bewerkt:
Via een automatische mail van Helpmij werd mij gevraagd om nog even op mijn eigen vraag te reageren, als die nog niet (helemaal) is opgelost.

Daarom vraag ik: Wil Frats nog even reageren over dat "conditie" of "condition"?
Ik heb urenlang op Internet gezocht en allerlei proeven gedaan. Maar ik kon niets beginnen met dat "conditie" of "condition".
Frats, wat bedoelde je daarmee? :rolleyes:
 
Met "condiction='true'" wordt bedoeld dat alleen de gegevenes worden opgehaald die aan deze voorwaarden voldoen.
Voorbeeld:
SELECT * FROM PERSOON WHERE `plaats`='AMSTERDAM';
Oftewel: haal alle gegevens op van personen die in Amsterdam wonen.

Zie ook http://dev.mysql.com/doc/refman/5.0/en/select.html voor de online reference manual.
Maar die ken je volgens mij al.

Lees je cursusboek goed door waant daarin staat het heel goed uitgelegd.
Ik wil je niet beledigen maar ken je de basis van programmeren?

Daarin leer je onder andere de instructie:
DOE dit ALS deze conditie waar is ANDERS Doe dat.


Flush leegt de cache.
 
Ik bedoelde inderdaad "gewist", dat was een schrijffoutje.

En conditie verwijst naar een veldnaam, en vergelijkt met de test waarde "true", het was een voorbeeldje van een SELECT query, meestal zul je eerder iets zien als

[sql]
SELECT *
FROM gebruiker
WHERE naam = 'Jan'
[/sql]

ofzo maar ik gebruik meestal generieke voorbeelden om de syntax duidelijk te maken, sorry als dat niet goed over kwam :)
 
Frats en Silkcom, hartelijk dank voor de reacties!
Ik denk dat de zaak nu inderdaad opgelost is! De uitdrukking WHERE naam = 'Jan' kan ik wel bijna dromen. Ik dacht alleen dat ik de woorden "conditie" of "condition" en "true" letterlijk over moest schrijven! Op zich lijkt me dat niet zo gek, want in Visual Basic worden de termen "true" en "false" letterlijk zo gebruikt. Maar dat is natuurlijk een heel andere taal dan MySQL en PHP.

Ik had ook ergens op internet gelezen, dat het woord "condition" in MySQL of PHP een gereserveerde term was zoals "SELECT" en "WHERE". Er zijn dan 2 mogelijkheden: 1. Degene die dat zegt zit er gewoon naast. 2. Het woord "condition" als gereserveerde term is nog weinig bekend. Misschien pas ingevoerd bij een van de laatste versies van deze talen. Maar het is me nu wel duidelijk, dat FRATS het woord "conditie" niet als een gereserveerde term bedoelde, maar slechts als een voorbeeld dat door iedere veldnaam vervangen kan worden.

Silkcom schreef: "Ik wil je niet beledigen maar ken je de basis van programmeren?"
Het is een beetje de vraag wat men rekent tot de basis. Maar de termen "SELECT", "FROM" en "WHERE" zijn bij mij overbekend en misschien al honderden keren met succes toegepast. Ik kan misschien wel een paar boeken vullen met alle code, die ik met succes heb toegepast. Programmeren is erg leuk als je resultaat op je werk ziet. De klanten van mijn webwinkel krijgen bijvoorbeeld automatische mails van mij waarin precies gereageerd wordt op de door hen bestelde artikelen en de door hen gekozen betalingswijze. Ik behoef slechts de kopie�n snel door te lezen die ik naar mezelf toestuur om de zaak te controleren. Kortom: Een leuke bezigheid! :)

Nogmaals mijn dank, mensen!
 
Nu we toch bezig zijn om de puntjes op de i te zetten (figuurlijk bedoeld natuurlijk):
Hierboven wilde ik het meervoud van kopie opschrijven. Maar de letter e met twee punten erop werd uiteindelijk anders weergegeven. (Namelijk door een i met twee puntjes erop, vervolgens een omgekeerd vraagteken, en tenslotte het teken voor een half). Ik weet dat dit een bekend probleem is. Het teken dat in de ene karakterset goed wordt weergegeven wordt in de andere karakterset niet goed weergegeven.
Maar mijn vraag is nu: Aan wie ligt dat precies in dit geval? Aan mij of aan de website van Helpmij.nl ? In het laatste geval zou het aan de redactie van Helpmij.nl moeten worden doorgegeven, denk ik. :thumb:
 
Vrienden, willen jullie nog even reageren op mijn laatste bericht (over de inter-punctie en de weergave ervan op deze website)?
Als jullie zeggen dat jullie het niet weten, weet ik tenminste dat ik het door kan geven aan de redactie of zo.
 
Eens even zien: ë


Gaat hier gewoon goed... ligt aan je browser denk ik? Of een bugje. Probeer nog eens paar van die tekens neer te zetten, dan kun je wel zien of het aan jou ligt of aan helpmij :)
 
Hé, dat is interessant! Bij jou gaat het wel goed!

Dus misschien kan ik dit verhelpen door mijn instellingen te veranderen. Ik gebruik trouwens gewoon de standaard-instellingen van Internet Explorer 8. Maar ik gebruik ook Windows XP op een laptop. Misschien ligt het daaraan.

In ieder geval ga ik het nog eens proberen: Door kopieën te maken kunnen we kopiëren alvorens een proces te beëindigen.
Ziezo, nu heb ik al 3 keer het teken ë geschreven. (Nu 4 keer).
 
Ja, nu is het 4 keer goed gegaan. Ik snap er niets van dat het de vorige keer niet goed ging. Dit is dan (voor voorlopig) één van de raadsels van de computer-wereld!
Vrienden, bedankt voor alles! :) :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan