Mysql
 sql >> база данни >  >> RDS >> Mysql

Вмъкване на временна таблица на MySQL

работейки върху написаното от Code-Monk, помислете за следното:

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

Тествайте съхранена процедура

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

Какво да не правите

Човек бине намерете много късмет със следното. Ако мислите така, стартирайте го няколко пъти;

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

тъй като create temporary table if not exists temp е люспест

Общи коментари

Човек не трябва да се впуска в писането на съхранени процедури, докато не владее донякъде простата тема за DELIMITERS. Пише за тях в раздел тук наречени Разделители . Просто се надявам да ви предпазя от ненужно губене на време за толкова просто нещо, което може да загуби много време за отстраняване на грешки.

Освен това тук във вашия въпрос, както и в тази препратка, имайте предвид, че създаването на таблици е DDL че може имат голям процент от общото профилиране (производителност). Забавя процедура в сравнение с използването на вече съществуваща таблица. Някой може да си помисли, че обаждането е мигновено, но не е така. По този начин, за производителност, използването на вече съществуваща таблица с резултати, поставени в техния собствен сегментиран rowId, е много по-бързо от трайното натоварване на DDL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проверка за празно поле с MySQL

  2. Как да инсталирате MySQL Workbench на Ubuntu

  3. Защо получавам различен резултат, когато използвам вътрешно присъединяване

  4. Mysql:Как мога да използвам RTRIM в моята заявка LOAD DATA INFILE?

  5. Безопасно ли е да съхранявате дати като низ в mysql?