2010-01-23 131 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 表格选项为 原表指定或任何外键 定义。