2013-02-16 134 views
4

有沒有辦法將列的結構從已填充的表複製到空的新表中?我只要求有關複製結構沒有數據mysql將列數據類型複製到另一個表

例子: 我們有一個表

CREATE TABLE `animals` (
`animal` varchar(11) NOT NULL, 
    `food` varchar(11) NOT NULL, 
    PRIMARY KEY (`animal`) 
) ENGINE=InnoDB 

INSERT INTO `animals` (`animal`, `food`) VALUES 
('cat', 'chips'), 
('dog', 'bones'), 
('shark', 'ppl'); 

和一個新的表名爲predators爲此我想對剛纔一列,但具有相同的數據鍵入爲動物的列類型。

有沒有辦法給SHOW列組合在一起/ FIELDS使用CREATE TABLE或使用具有某種類型的像VARCHAR(17)列創建表,然後ALTER其更改爲相同類型的animal列?

我知道這是一個簡單的問題,但我還沒有得到任何運氣找到它的答案

回答

9

如果你要複製的數據:

INSERT INTO newTable (col1, col2) 
SELECT col1, col2 FROM otherTable 

如果你要複製的表結構:

使用LIKE基於另一表的定義,包括在原始表中定義的任何列屬性和索引以創建一個空表:

CREATE TABLE new_tbl LIKE orig_tbl; 

使用與原始表格相同版本的表格存儲格式創建副本。原始表上需要SELECT權限。

Documentation

如果要複製的結構和數據:

CREATE TABLE animals2 AS 
SELECT * 
FROM animals ; 

如果你要複製的結構(但不是所有列)無數據:

CREATE TABLE animals2 AS 
SELECT animal    -- only the columns you want 
FROM animals 
WHERE FALSE;     -- and no data 
+0

是的想到這一點,但我不想複製表,並從中刪除列。我想看看其他可能的方式。但是,謝謝 – Dilyana 2013-02-16 18:26:49

+2

'CREATE TABLE animals2 AS SELECT動物從動物WHERE FALSE;'將僅創建一個只有一列的表(並且不復制任何數據)。 – 2013-02-16 18:27:47

+0

但是'PRIMARY KEY'約束不會被結轉(我認爲)。 – 2013-02-16 18:28:30

相關問題