13.1.20.2 CREATE TEMPORARY TABLE Statement

È possibile utilizzare la parola chiave TEMPORARYquando si crea una tabella. Una tabellaTEMPORARY è visibile solo all’interno della sessione corrente e viene eliminata automaticamente quando la sessione viene chiusa. Ciò significa che due sessioni diverse possono utilizzare lo stesso nome di tabella temporanea senza entrare in conflitto tra loro o con una tabella nonTEMPORARY esistente con lo stesso nome., (La tabella esistente viene nascosta fino a quando la tabella temporanea non viene eliminata.)

InnoDB non supporta tabelle temporanee compresse. Quandoinnodb_strict_mode è abilitato (il valore predefinito),CREATE TEMPORARY TABLE restituisce un errore seROW_FORMAT=COMPRESSED oKEY_BLOCK_SIZE è specificato. Seinnodb_strict_mode è disabilitato, vengono emessi avvisi e la tabella temporanea viene creata utilizzando un formato di riga non compresso. L’opzioneinnodb_file_per-table non influisce sulla creazione diInnoDB tabelle temporanee.,

CREATE TABLE causa un commit implicito, tranne quando viene utilizzato con la parola chiave TEMPORARY. Vedere Sezione 13.3.3, “Istruzioni che causano un commit implicito”.

TEMPORARY le tabelle hanno una relazione molto allentata con i database (schemi). L’eliminazione di un database non rilascia automaticamente alcuna tabellaTEMPORARY creata all’interno di tale database.

Per creare una tabella temporanea, è necessario disporre del privilegio CREATE TEMPORARY TABLES., Dopo che una sessione ha creato una tabella temporanea, il server non esegue ulteriori controlli dei privilegi sulla tabella. La sessione di creazione può eseguire qualsiasi operazione sulla tabella, ad esempioDROP TABLE,INSERT,UPDATE oSELECT.

Un’implicazione di questo comportamento è che una sessione può manipolare le sue tabelle temporanee anche se l’utente corrente non ha alcun privilegio per crearle., Supponiamo che l’utente corrente non abbia il privilegio CREATE TEMPORARY TABLES ma sia in grado di eseguire una stored procedure definer-context che viene eseguita con i privilegi di un utente che ha CREATE TEMPORARY TABLES e che crea una tabella temporanea. Durante l’esecuzione della procedura, la sessione utilizza i privilegi dell’utente che definisce. Dopo il ritorno della procedura, i privilegi effettivi tornano a quelli dell’utente corrente, che può ancora vedere la tabella temporanea ed eseguire qualsiasi operazione su di essa.,

È possibile utilizzare CREATE TEMPORY TABLE ... LIKE per creare una tabella vuota, basata sulla definizione di una tabella che si trova nel mysql tablespace, InnoDB sistema di tablespace (innodb_system), o in generale tablespace. La definizione di tablespace per tale tabella include un attributo TABLESPACE che definisce il tablespace in cui risiede la tabella e i tablespace di cui sopra non supportano le tabelle temporanee., Per creare una tabella temporanea, basata sulla definizione di una tabella, utilizzare invece questa sintassi:

CREATE TEMPORARY TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
Nota

Supporto TABLESPACE = innodb_file_per_table e TABLESPACE = innodb_temporary clausole con CREATE TEMPORARY TABLE è deprecato come di MySQL 8.0.13, si aspettano di essere in una futura versione di MySQL.