2015-05-28 99 views
2

我試圖通過有原所有的優勢除了分區的python腳本來創建表的副本。我想(通過一個for循環),因爲我想從該表mysqldump的舊數據的日常文件,在我的腳本這個多次做的,所以我想用這樣的:創建表不分區

CREATE TABLE temp_utilization LIKE utilization WITHOUT PARTITIONING; 

這裏是原始表:

CREATE TABLE `utilization` (
    `wrep_time` timestamp NULL DEFAULT NULL, 
    `end_time` timestamp NULL DEFAULT NULL, 
    `location` varchar(64) NOT NULL, 
    `sub_location` varchar(64) NOT NULL, 
    `model_id` varchar(255) DEFAULT NULL, 
    `offline` int(11) DEFAULT NULL, 
    `disabled` int(11) NOT NULL DEFAULT '0', 
    `total` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`location`,`sub_location`,`wrep_time`), 
    KEY `key_location` (`location`), 
    KEY `key_sub_location` (`sub_location`), 
    KEY `end_time` (`end_time`), 
    KEY `wrep_time` (`wrep_time`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
/*!50100 PARTITION BY RANGE (UNIX_TIMESTAMP(wrep_time)) 
(PARTITION p0 VALUES LESS THAN (1391990400) ENGINE = InnoDB, 
PARTITION p1 VALUES LESS THAN (1392076800) ENGINE = InnoDB, 
PARTITION p2 VALUES LESS THAN (1392163200) ENGINE = InnoDB, 
PARTITION p3 VALUES LESS THAN (1392249600) ENGINE = InnoDB, 
PARTITION p492 VALUES LESS THAN (1434499200) ENGINE = InnoDB, 
PARTITION p493 VALUES LESS THAN (1434585600) ENGINE = InnoDB, 
PARTITION p494 VALUES LESS THAN (1434672000) ENGINE = InnoDB, 
PARTITION p495 VALUES LESS THAN (1434758400) ENGINE = InnoDB, 
PARTITION p496 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */ 

我想創建一個包含這樣的創建表的臨時表:

CREATE TABLE `temp_utilization` (
    `wrep_time` timestamp NULL DEFAULT NULL, 
    `end_time` timestamp NULL DEFAULT NULL, 
    `location` varchar(64) NOT NULL, 
    `sub_location` varchar(64) NOT NULL, 
    `model_id` varchar(255) DEFAULT NULL, 
    `offline` int(11) DEFAULT NULL, 
    `disabled` int(11) NOT NULL DEFAULT '0', 
    `total` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`location`,`sub_location`,`wrep_time`), 
    KEY `key_location` (`location`), 
    KEY `key_sub_location` (`sub_location`), 
    KEY `end_time` (`end_time`), 
    KEY `wrep_time` (`wrep_time`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
+0

我爲此道歉。如果有一個MySQL命令爲我執行此操作,那將會很棒。現在,我正在使用:「CREATE TABLE temp_utilization LIKE utilization」。我想知道是否有添加「IGNORE PARTITIONING」命令的方法。 –

+0

我只是想創建表格。 –

回答

1

不,它不會出現,你可以創建一個表像,而不p另一個表如果它已經被分割,就可以按照上面的建議在一個命令中進行分割。

分區是表定義的一部分,並且被存儲在元數據中。您可以通過執行show create table yourtablename;

如果您只是想在沒有分區和數據的循環中反覆創建表,我會看到三個(添加一個Cez b/c)選項。

  1. 有表定義的腳本

  2. 硬編碼創建數據庫表不分區。因此,您已經創建了一個臨時表並將其用作您的循環模板。

  3. 運行從腳本兩個單獨的命令:一個創建表等,然後一個ALTER TABLE刪除在一個循環中的分區。

您可以選擇最適合您的環境的選項。

dev.mysql創建表時您可以參考你的選擇。

+0

天才,很簡單!答案2似乎是這種情況下一個不錯的主意。我只是想知道是否有更好的方法來完成這個操作,比如使用簡單的MySQL命令。 –

+0

另一個答案在兩個簡單的SQL命令中完成;它應該是「被接受的答案」。 –

2
mysql> alter table utilization remove partitioning; 
Query OK, 0 rows affected (0.40 sec) 
Records: 0 Duplicates: 0 Warnings: 0 

mysql> show create table utilization\G 
*************************** 1. row *************************** 
     Table: utilization 
Create Table: CREATE TABLE `utilization` (
    `wrep_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `end_time` timestamp NULL DEFAULT NULL, 
    `location` varchar(64) NOT NULL, 
    `sub_location` varchar(64) NOT NULL, 
    `model_id` varchar(255) DEFAULT NULL, 
    `offline` int(11) DEFAULT NULL, 
    `disabled` int(11) NOT NULL DEFAULT '0', 
    `total` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`location`,`sub_location`,`wrep_time`), 
    KEY `key_location` (`location`), 
    KEY `key_sub_location` (`sub_location`), 
    KEY `end_time` (`end_time`), 
    KEY `wrep_time` (`wrep_time`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

所以,你的例子:

CREATE TABLE temp_utilization LIKE utilization; 
ALTER TABLE temp_utilization REMOVE PARTITIONING; 
你的循環過程中

然後你可以CREATE TABLE t1 LIKE temp_utilization或根據需要來命名錶