2010-01-23 6 views
0

Я искал это здесь и в Google и на удивление не нашел ответа. Я попытался создать синтаксис для отправки в mysql, который создал бы несколько таблиц с одинаковыми столбцами, но он возвратил ошибку. Можете ли вы указать, что не так с моим синтаксисом, или если это возможно?создание нескольких таблиц с одной командой sql

CREATE TABLE news, life 
(
id int PRIMARY KEY AUTO_INCREMENT , 
name varchar(30) , 
email varchar(50) , 
COMMENT text, 
datetime datetime, 
ip varchar(20) 
) 
+2

Несколько таблиц, все с одинаковыми колонками? Вы действительно хотите это сделать? Вы думали о добавлении столбца типа, который имеет значения «новости» или «жизнь»? –

ответ

2

Невозможно это так.

Подумайте о своем дизайне стола. Это звучит так, как вам следует подумать о создании отдельной таблицы и добавлении другого столбца type, который будет news или life (или ссылка на другую таблицу, определяющую типы).


Если вам действительно нужны две таблицы, создать первую таблицу:

CREATE TABLE news 
(
id int PRIMARY KEY AUTO_INCREMENT , 
name varchar(30) , 
email varchar(50) , 
COMMENT text, 
datetime datetime, 
ip varchar(20) 
) 

, а затем

CREATE TABLE life AS (SELECT * FROM news where 1=2); 

Индексы и ограничения (UNIQUE, PRIMARY KEY, FOREIGN KEY) не будут скопированы хотя , Вам придется обращаться с ними самостоятельно.

+0

peter, благодарит за ваш ответ. ценят озабоченность по поводу дизайна таблицы, это на самом деле намного сложнее, чем это, я просто использовал небольшой пример. можете ли вы объяснить, где 1 = 2? изменит ли код, если я создаю более двух таблиц? –

+1

По-прежнему не уверен, почему вам нужно больше одной таблицы ... Использование '1 = 2' гарантирует, что строки не будут возвращены (это фактически копирует содержимое' news' в 'life' в противном случае). При создании более чем одной таблицы код будет таким же. См. Мое изменение об индексах и ограничениях. –

3

Вы находитесь в mysql, чтобы использовать команду LIKE команды CREATE TABLE; таким образом вы также получите атрибуты столбца и индексы, скопированные, например.

CREATE TABLE new_tbl LIKE orig_tbl; 

см http://dev.mysql.com/doc/refman/5.1/en/create-table.html

Использование LIKE для создания пустой таблицы на основе определения другого таблицы, включая любые атрибуты столбца и индексы, определенные в исходном таблице: CREATE TABLE new_tbl Т.П. orig_tbl; Копия создается с использованием той же версии таблицы хранения формат в качестве исходной таблицы. В оригинальной таблице требуется привилегия SELECT . LIKE работает только для базовых таблиц, а не для просмотров. CREATE TABLE ... LIKE не сохраняет DATA DIRECTORY или INDEX DIRECTORY параметры таблицы, которые были указаны для исходной таблицы или любых внешних ключей .

Смежные вопросы