Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Temp-Tabelle einfügen

Berücksichtigen Sie bei der Arbeit an dem, was Code-Monk geschrieben hat, Folgendes:

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

Gespeicherte Prozedur testen

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

Was Sie nicht tun sollten

Man würde nicht finde viel Glück mit dem Folgenden. Wenn Sie das glauben, führen Sie es ein paar Mal aus;

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

weil create temporary table if not exists temp ist schuppig

Allgemeine Kommentare

Man sollte nicht damit beginnen, gespeicherte Prozeduren zu schreiben, bis man das einfache Thema DELIMITERS einigermaßen fließend beherrscht. Ich habe darüber in einem Abschnitt hier geschrieben als Trennzeichen bezeichnet . Nur in der Hoffnung, Sie vor unnötig verschwendeter Zeit mit so einer einfachen Sache zu bewahren, kann viel Zeit für die Fehlerbehebung verschwendet werden.

Denken Sie auch hier in Ihrer Frage sowie in dieser Referenz daran, dass die Erstellung von Tabellen DDL ist das kann haben einen großen Prozentsatz der Gesamtprofilierung (Leistung). Es verlangsamt einen Prozess im Vergleich zur Verwendung einer bereits vorhandenen Tabelle. Man könnte meinen, der Anruf erfolgt sofort, ist es aber nicht. Aus Leistungsgründen ist daher die Verwendung einer bereits vorhandenen Tabelle mit Einser-Ergebnissen, die in ihre eigene segmentierte Zeilen-ID eingefügt werden, viel schneller als der dauerhafte DDL-Overhead.