您的位置:首页 > 数据库 > MySQL

mysql 普通表转分区表

2015-08-06 15:41 711 查看
<pre name="code" class="sql"> CREATE TABLE `history_log` (
`id` bigint(20) unsigned NOT NULL,
`itemid` bigint(20) unsigned NOT NULL,
`clock` int(11) NOT NULL DEFAULT '0',
`timestamp` int(11) NOT NULL DEFAULT '0',
`source` varchar(64) NOT NULL DEFAULT '',
`severity` int(11) NOT NULL DEFAULT '0',
`value` text NOT NULL,
`logeventid` int(11) NOT NULL DEFAULT '0',
`ns` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `history_log_2` (`itemid`,`id`),
KEY `history_log_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

alter table history_log partition by RANGE (clock)
(PARTITION  p20150806 values less than (20150807));

mysql> alter table history_log partition by RANGE (clock)
-> (PARTITION  p20150806 values less than (20150807));
ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function

主键必须包含分区键:

mysql>  CREATE TABLE `history_log` (
->   `id` bigint(20) unsigned NOT NULL,
->   `itemid` bigint(20) unsigned NOT NULL,
->   `clock` int(11) NOT NULL DEFAULT '0',
->   `timestamp` int(11) NOT NULL DEFAULT '0',
->   `source` varchar(64) NOT NULL DEFAULT '',
->   `severity` int(11) NOT NULL DEFAULT '0',
->   `value` text NOT NULL,
->   `logeventid` int(11) NOT NULL DEFAULT '0',
->   `ns` int(11) NOT NULL DEFAULT '0',
->   PRIMARY KEY (`id`,`clock`),
->   UNIQUE KEY `history_log_2` (`itemid`,`id`),
->   KEY `history_log_1` (`itemid`,`clock`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.03 sec)

mysql> alter table history_log partition by RANGE (clock)
-> (PARTITION  p20150806 values less than (20150807));
ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function

唯一索引也得包含分区键:
CREATE TABLE `history_log` (
`id` bigint(20) unsigned NOT NULL,
`itemid` bigint(20) unsigned NOT NULL,
`clock` int(11) NOT NULL DEFAULT '0',
`timestamp` int(11) NOT NULL DEFAULT '0',
`source` varchar(64) NOT NULL DEFAULT '',
`severity` int(11) NOT NULL DEFAULT '0',
`value` text NOT NULL,
`logeventid` int(11) NOT NULL DEFAULT '0',
`ns` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`,`clock`),
UNIQUE KEY `history_log_2` (`itemid`,`id`,`clock`),
KEY `history_log_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
partition by RANGE (clock)  (PARTITION  p20150806 values less than (20150807));
---------------------------------------------------------------------------------
mysql>  CREATE TABLE `history_log` (
->   `id` bigint(20) unsigned NOT NULL,
->   `itemid` bigint(20) unsigned NOT NULL,
->   `clock` int(11) NOT NULL DEFAULT '0',
->   `timestamp` int(11) NOT NULL DEFAULT '0',
->   `source` varchar(64) NOT NULL DEFAULT '',
->   `severity` int(11) NOT NULL DEFAULT '0',
->   `value` text NOT NULL,
->   `logeventid` int(11) NOT NULL DEFAULT '0',
->   `ns` int(11) NOT NULL DEFAULT '0',
->   PRIMARY KEY (`id`,`clock`),
->   UNIQUE KEY `history_log_2` (`itemid`,`id`,`clock`),
->   KEY `history_log_1` (`itemid`,`clock`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8
-> partition by RANGE (clock)  (PARTITION  p20150806 values less than (20150807));
Query OK, 0 rows affected (0.03 sec)

mysql> desc history_log;
+------------+---------------------+------+-----+---------+-------+
| Field      | Type                | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+-------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    |       |
| itemid     | bigint(20) unsigned | NO   | MUL | NULL    |       |
| clock      | int(11)             | NO   | PRI | 0       |       |
| timestamp  | int(11)             | NO   |     | 0       |       |
| source     | varchar(64)         | NO   |     |         |       |
| severity   | int(11)             | NO   |     | 0       |       |
| value      | text                | NO   |     | NULL    |       |
| logeventid | int(11)             | NO   |     | 0       |       |
| ns         | int(11)             | NO   |     | 0       |       |
+------------+---------------------+------+-----+---------+-------+
9 rows in set (0.01 sec)

mysql> show create table history_log\G;
*************************** 1. row ***************************
Table: history_log
Create Table: CREATE TABLE `history_log` (
`id` bigint(20) unsigned NOT NULL,
`itemid` bigint(20) unsigned NOT NULL,
`clock` int(11) NOT NULL DEFAULT '0',
`timestamp` int(11) NOT NULL DEFAULT '0',
`source` varchar(64) NOT NULL DEFAULT '',
`severity` int(11) NOT NULL DEFAULT '0',
`value` text NOT NULL,
`logeventid` int(11) NOT NULL DEFAULT '0',
`ns` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`,`clock`),
UNIQUE KEY `history_log_2` (`itemid`,`id`,`clock`),
KEY `history_log_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (clock)
(PARTITION p20150806 VALUES LESS THAN (20150807) ENGINE = InnoDB) */
1 row in set (0.00 sec)

ERROR:
No query specified



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: