Vraag & Antwoord

Webprogrammeren & scripting

Waar is mijn TEMPORARY TABLE?

7 antwoorden
  • Ik heb er weer eentje :D Ik gebruik phpMyAdmin 2.5.4 en mySql 4.0.16 Ik heb hetvolgende stukje Sql: DROP TABLE IF EXISTS alvifa; CREATE [b:7f4cd4c685]TEMPORARY[/b:7f4cd4c685] TABLE alvifa (Naam VARCHAR(20), Leeftijd INT(3)) TYPE=MyISAM; INSERT INTO alvifa(Naam,Leeftijd) SELECT table2.Naam, table2.Leeftijd FROM table2 LEFT JOIN table1 ON table2.Naam = table1.Naam WHERE table1.Naam IS NULL ORDER BY Leeftijd; Dit stukje sql wilt voor geen sodemieter werken als ik dit invoer in phpMyAdmin als geheel. Als ik dit doe in mySql zelf dan heb ik geen probleem. De tijdelijke tabel wordt aagemaakt en netjes gevuld met het resultaat van het SELECT statement. SELECT * FROM alvifa geeft dus de resultaten weer in mySql zelf. Switch ik weer terug naar phpMyAdmin en type daar SELECT * FROM alvifa dan krijg ik de melding dat alvifa niet bestaat :-? Als ik in phpMyAdmin het per regel laat uitvoeren dan levert hetvolgende geen problemen op: DROP TABLE IF EXISTS alvifa; --> Uw SQL-query is succesvol uitgevoerd CREATE TEMPORARY TABLE alvifa (Naam VARCHAR(20), Leeftijd INT(5)) TYPE=MyISAM; --> Uw SQL-query is succesvol uitgevoerd SELECT * FROM alvifa; --> table alvifa doesn't exist Dit vind ik dus raar, want daarnet krijg ik nog netjes te zien dat alvifa succelvol is gemaakt. Wat doe ik verkeerd en/of zie ik over het hoofd?
  • Het is dan ook een tijdelijke tabel die alleen gebruikt kan worden in de SQL statements die min of meer bij elkaar horen. De commandline tool van MySQL zal dat stuk code dan ook als één zien, phpMyAdmin zal er wel allemaal losse statements van maken en dan verdwijnt die tijdelijke tabel dus gewoon weer...
  • Dit is volgens mij niet waar wat je zegt. Ik zit in MySql en voer heel de riedel in. Vervolgens type ik SELECT * FROM alvifa; Ik krijg netjes te zien wat ik moet zien. Ik ga naar phpMyAdmin en voer daar in: SELECT * FROM alvifa; Dan krijg ik te zien: #1146 - Table 'alvifa' doesn't exist [b:10a573207c]error #1146 staat voor: define ER_NO_SUCH_TABLE[/b:10a573207c] Ik ga meteen weer terug naar MySql en voer weer in: SELECT * FROM alvifa; En ik krijg alles weer netjes te zien. Dus die tabel wordt niet gedropt, want dat krijg je, volgens mij, alleen maar voor elkaar als ik zeg DROP TABLE alvifa; of ik verbreek de connectie met de MySql database. Er is volgens mij iets anders aan de hand, maar wat precies weet ik niet.
  • En wat als je de commandline van MySQL afsluit, daarna weer opstart en dan die SELECT query weer uitvoerd?
  • Dan bestaat die tabel niet meer. Maar dat zei ik hierboven al ;) Ik heb al heel wat voorbeelden gevonden op internet, maar ik zie toch echt niet wat ik fout doe. Interpretereer ik CREATE TEMPORARY TABLE dan verkeerd? Ik heb maar een tijdelijke tabel nodig waar ik weer een SELECT statement op loslaat. Dan mag die tabel van mij verdwijnen.
  • Een tijdelijke table bestaat over het algemeen alleen binnen een bepaalde connectie en is dus ook niet te delen met andere sessies (ik zeg even "over het algemeen" omdat niet alle databases daar op dezelfde manier mee om hoeven te gaan). Als je de connectie verbreekt is je tijdelijke table dus ook weg. Via de shell werk je binnen dezelfde sessie/connectie en phpMyAdmin maakt blijkbaar telkens een nieuwe connectie (of pakt er eentje uit de pool) voor elk uit te voeren statement. De oplossing is dus simpel: gebruik een 'gewone' table en drop deze weer als je klaar bent.
  • [quote:b7964a752e="Annie"]Een tijdelijke table bestaat over het algemeen alleen binnen een bepaalde connectie en is dus ook niet te delen met andere sessies (ik zeg even "over het algemeen" omdat niet alle databases daar op dezelfde manier mee om hoeven te gaan). Als je de connectie verbreekt is je tijdelijke table dus ook weg. Via de shell werk je binnen dezelfde sessie/connectie en phpMyAdmin maakt blijkbaar telkens een nieuwe connectie (of pakt er eentje uit de pool) voor elk uit te voeren statement. De oplossing is dus simpel: gebruik een 'gewone' table en drop deze weer als je klaar bent.[/quote:b7964a752e] Thanks voor de uitleg van de TEMP TABLE :D Ik had het dus blijkbaar anders voor ogen dan dat het daadwerkelijk werkt. Ik heb ondertussen idd het zodanig opgelost dat er een gewone table wordt aangemaakt en die daarna wordt gedropt. Moest wel ff de rechten aanpassen, kwam ik na een hoop gevloek achter. De rechten voor TEMP TABLE stond wel aan, maar niet voor een normale TABLE :oops:

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.