sql >> Databáze >  >> RDS >> Mysql

Vložení dočasné tabulky MySQL

při práci na tom, co napsal Code-Monk, zvažte následující:

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

Testovat uloženou proceduru

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

Co nedělat

Člověk by ne najít hodně štěstí s následujícím. Pokud si myslíte, že ano, spusťte jej několikrát;

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

protože create temporary table if not exists temp je flakey

Obecné komentáře

Člověk by se neměl pouštět do psaní uložených postupů, dokud trochu neovládá jednoduché téma DELIMITERŮ. Napsali o nich v sekci zde nazývané Oddělovače . Jen doufat, že vás to odradí od zbytečného plýtvání časem na tak jednoduché věci, které může ztrácet spoustu času laděním.

Také zde ve vaší otázce, stejně jako v tomto odkazu, mějte na paměti, že vytváření tabulek je DDL které může mají velké procento z celkového profilování (výkonu). Zpomaluje proces oproti použití již existující tabulky. Někdo by si mohl myslet, že hovor je okamžitý, ale není tomu tak. Z důvodu výkonu je použití již existující tabulky s výsledky vloženými do vlastního segmentovaného rowId mnohem rychlejší než trvalé režie DDL.



  1. Lineární regrese, hledání sklonu v MySQL

  2. Architektura SQL Server AlwaysOn ( Availability Group ) a instalace krok za krokem -3 kroky ručního selhání

  3. Jak zvýšit velikost vyrovnávací paměti v Oracle SQL Developer pro zobrazení všech záznamů?

  4. Význam WHERE 1 v dotazech MySQL