Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wstaw tabelę MySQL Temp

pracując nad tym, co napisał Code-Monk, rozważ następujące kwestie:

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

Przetestuj zapisaną procedurę

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

Czego nie robić

Jeden nie znaleźć dużo szczęścia z następującymi. Jeśli tak uważasz, uruchom go kilka razy;

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

ponieważ create temporary table if not exists temp jest łuszcząca się

Komentarze ogólne

Nie powinno się zaczynać pisania przechowywanych proc, dopóki nie będzie biegle opanowany prosty temat DELIMITERS. Pisałem o nich w sekcji tutaj zwane ogranicznikami . Mam tylko nadzieję, że nie zmarnujesz niepotrzebnie czasu na tak prostą rzecz, która może zmarnować dużo czasu na debugowanie.

Pamiętaj też, że w Twoim pytaniu, jak również w tym dokumencie, tworzenie tabel to DDL że może mają duży procent ogólnego profilowania (wydajności). Spowalnia proc, w przeciwieństwie do używania istniejącej tabeli. Można by pomyśleć, że połączenie jest natychmiastowe, ale tak nie jest. W związku z tym, ze względu na wydajność, użycie istniejącej tabeli z wynikami umieszczonymi we własnym segmentowanym rowId jest znacznie szybsze niż trwałe obciążenie 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. Data w adresie URL dd/mm/rrrr

  2. CryptDB - nie można połączyć się z serwerem proxy (BŁĄD 1105 (HY000):(proxy) wszystkie backendy nie działają)

  3. Nie można usunąć ani zaktualizować wiersza nadrzędnego:ograniczenie klucza obcego nie działa

  4. mySQL CAST i ASC / DESC

  5. Używanie IN z podzapytaniem nie używa indeksu