Ayrı bir CREATE TABLE olmadan bir SELECT deyiminde geçici bir tablo oluşturma


494

Tablo oluştur ifadesi kullanmadan ve her sütun türünü belirtmeden bir select deyiminden geçici (yalnızca oturum) bir tablo oluşturmak mümkün müdür? Türetilmiş tablolar bu yeteneğine sahip biliyorum, ama bunlar süper geçici (sadece ifade) ve yeniden kullanmak istiyorum.

Tablo oluştur komutunu yazmak ve sütun listesini ve tür listesini eşleştirmek zorunda kalmazsam zaman kazandıracaktı.

Yanıtlar:


789
CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1)

Http://dev.mysql.com/doc/refman/5.7/en/create-table.html adresinde bulunan kılavuzdan

Bir tablo oluştururken TEMPORARY anahtar sözcüğünü kullanabilirsiniz. GEÇİCİ tablodur yalnızca geçerli oturumda görünür edilir ve otomatik olarak bırakılan oturum kapatıldığında. Bu, iki farklı oturumun aynı geçici tablo adını birbiriyle çakışmadan veya aynı ada sahip TEMPORARY olmayan bir tabloyla kullanabileceği anlamına gelir. (Varolan tablo geçici tablo bırakılana kadar gizlidir.) Geçici tablolar oluşturmak için GEÇİCİ TABLOLAR OLUŞTURMA ayrıcalığına sahip olmanız gerekir.


8
Mükemmel! Optimum maxlength ve hepsine sahip sütunlar! Ben sözcüğü eklendi temporaryböylece create temporary table mytable as select ....
Bryan Field

5
@ imperium2335, Belki aşağıdakileri denemelisiniz: create table t as select ... limit 0; alter table t engine=memory; insert into t select .... Veya "yeni tabloların varsayılan motoru" nu değiştirebilirsiniz. Bunun bir oturum düzeyi değişkeninde yapılabileceğini düşünüyorum. Daha da iyisi, sağ üstteki Soru Sor düğmesini kullanın.
Bryan Field

10
Sorgu Tablo oluşturmaktan kaçınmak istemesinin nedeni olan sütun adları ve türleri hakkında bilgi sahibi olmak gerekmez.
psparrow

30
CREATE TEMPORARY TABLE IF NOT EXISTS table2 LIKE table1veri kopyalamak istemiyorsanız, bu şekilde kullanabilirsiniz , sadece yapı
dzona

1
oturumla ne demek istiyorsun?
Saurabh Chandra Patel

137

Geçici tablonuza bir dizin eklemeniz gerekiyorsa psparrow'un cevabına ek olarak şunları yapın:

CREATE TEMPORARY TABLE IF NOT EXISTS 
  temp_table ( INDEX(col_2) ) 
ENGINE=MyISAM 
AS (
  SELECT col_1, coll_2, coll_3
  FROM mytable
)

Ayrıca çalışır PRIMARY KEY


3
Motor = Bellek bu sözdizimiyle de kullanılabilir mi?
DarkSide

6
@DarkSide Evet MOTOR = BELLEK de kullanılabilir. Aşağıdaki örneğe bakın: blog.cnizz.com/2010/11/24/…
RafaSashi

1
MyISAM ve Bellek motoru arasındaki fark nedir? hafızanın faydaları nelerdir?
yeahman


54

Motor seçimden önce olmalıdır:

CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY 
as (select * from table1)

39

ENGINE=MEMORYtablo BLOB/ TEXTsütun içerdiğinde desteklenmez


0
CREATE TEMPORARY TABLE IF NOT EXISTS to_table_name AS (SELECT * FROM from_table_name)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.