sql >> Database >  >> RDS >> Mysql

MySQL Temp-tabel Invoegen

werken aan wat Code-Monk schreef, overweeg dan het volgende:

drop procedure if exists uspK;
DELIMITER $$
create procedure uspK ()
BEGIN
    drop temporary table if exists temp; -- could be some other random structure residue

    create temporary table temp
    SELECT aID, bID
    FROM tags
    WHERE placeID = "abc" AND tagID = "def";

    -- use the temp table somehow
    -- ...
    -- ...
    -- ...

    drop temporary table temp; -- otherwise it survives the stored proc call
END
$$ -- signify end of block
DELIMITER ; -- reset to default delimiter

Test opgeslagen procedure

call uspK(); -- test it, no warnings on edge conditions

Wat niet te doen

Men zou niet veel succes met het volgende. Als je denkt van wel, voer het dan een paar keer uit;

drop procedure if exists uspK;
DELIMITER $$
create procedure uspK ()
BEGIN
    -- drop temporary table if exists temp;

    create temporary table if not exists temp
    SELECT aID, bID
    FROM tags
    WHERE placeID = "abc" AND tagID = "def";

    -- use the temp table somehow
    -- ...
    -- ...
    -- ...

    -- drop temporary table temp; -- otherwise it survives the stored proc call
END
$$ -- signify end of block
DELIMITER ; -- reset to default delimiter

omdat create temporary table if not exists temp is onbetrouwbaar

Algemene opmerkingen

Men moet niet beginnen met het schrijven van opgeslagen procedures voordat men enigszins vloeiend is over het eenvoudige onderwerp DELIMITERS. Schreef over hen in een sectie hier genaamd scheidingstekens . In de hoop u te voorkomen dat u onnodige tijd verspilt aan zoiets eenvoudigs, dan kunt u veel tijd verspillen aan het opsporen van fouten.

Houd ook hier in uw vraag, evenals in die verwijzing, in gedachten dat het maken van tabellen DDL is dat kan een groot percentage van de algehele profilering (prestaties) hebben. Het vertraagt ​​een proces in plaats van een reeds bestaande tabel te gebruiken. Je zou kunnen denken dat de oproep onmiddellijk is, maar dat is niet zo. Als zodanig is voor de prestaties het gebruik van een reeds bestaande tabel met de resultaten die in hun eigen gesegmenteerde rowId worden geplaatst veel sneller dan het verdragen van DDL-overhead.



  1. Homebrew postgres kapot

  2. Hoe recursie te voorkomen in een update-trigger die een update uitvoert?

  3. JDBC-verbindingsfout:niet-herkende tijdzone

  4. Rangschik forumberichten op de tijd van het laatste antwoord