2012-02-11 4 views
29

Я хочу создать таблицу, представляющую собой кеш результатов из представления. Есть ли простой способ автоматически определить таблицу из определения представления, или мне придется сгладить ее вместе с show create table view?Простой синтаксис «create table from view» в mysql?

ответ

40

Вы можете сделать CREATE TABLE SELECT с точки зрения его постройки. Это должно дублировать структуру представления как новую таблицу, содержащую все строки представления. Вот этот MySQL syntax reference.

CREATE TABLE tbl_from_view AS  
    SELECT 
    col1, 
    col2, 
    col3, 
    col4, 
    col5 
    FROM your_view; 

Обратите внимание, что вы захотите быть очень явным в выборе столбцов. Не рекомендуется делать SELECT * с исходного вида. Удостоверьтесь также, что у вас есть псевдонимы для любых расчетных или агрегатных столбцов, таких как COUNT(*), MAX(*), (col1 + col2) и т. Д.

+4

Почему не рекомендуется делать SELECT *? –

+4

@MartinBurch Как правило, не рекомендуется использовать SELECT * в производственном коде, предпочитая вместо этого явно указывать полученные столбцы и их порядок. В случае CTAS вы можете указать порядок столбцов. Если вы точно знаете, что вам нужны все столбцы, и они уже находятся в предпочтительном порядке, тогда продолжайте «SELECT *», но лучше быть явным и избегать сюжетных операций (например, большие столбцы бинарного столбца, добавленные вашими коллегами, без ведома вы) –

1

Я также обнаружил, что в выводе mysqldump есть инструкции, которые создают представление в виде таблицы, перед тем, как он определяет представление. Я могу разобрать их и запустить их в качестве запросов.