2010-01-23 60 views
0

我在這裏和谷歌搜索了這個,並且出人意料地找不到答案。我試圖創建語法來提交給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

多個表,所有列都相同?你確定你想這樣做嗎?你有沒有想過添加一個「新聞」或「生活」值的「類型」列? – 2010-01-23 17:04:55

回答

2

這是不可能的。

想想你的餐桌設計。這聽起來像你應該考慮創建一個表,並添加另一列type將是newslife(或對另一個表定義類型的引用)。


如果你真的需要兩個表,創建你的第一個表:

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); 

索引和約束(UNIQUEPRIMARY KEYFOREIGN KEY)不會,雖然複製。你將不得不自己處理它們。

+0

彼得, 感謝您的回覆。欣賞對桌子設計的關注,它實際上比這更復雜,我只是使用了一個小例子。你能解釋哪裏1 = 2?如果我創建了兩個以上的表格,那麼代碼會發生變化嗎? – 2010-01-23 17:05:00

+1

仍然不確定爲什麼你需要多個表...使用'1 = 2'確保沒有行被返回(否則這實際上將'news'的內容複製到'life')。創建多個表時,代碼將相同。查看我的關於索引和約束的編輯。 – 2010-01-23 17:10:18

3

您在mysql中,因此您可以使用CREATE TABLE命令的LIKE子句;這樣你也可以獲得通過例如複製的列屬性和索引。

CREATE TABLE new_tbl LIKE orig_tbl; 

看到http://dev.mysql.com/doc/refman/5.1/en/create-table.html

使用像創建基於另一個 表的定義,包括任何列的空表 屬性 原始 表定義的索引:CREATE TABLE new_tbl LIKE orig_tbl;該副本是使用 與表格存儲 格式相同版本創建的原始表格。在 原始表格上需要 SELECT權限。 LIKE僅適用於 基表,不適用於視圖。 CREATE TABLE ... LIKE不保留任何 DATA DIRECTORY或INDEX DIRECTORY 表格選項爲 原表指定或任何外鍵 定義。

相關問題