mysql 普通表转分区表

<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


 

你可能感兴趣的:(mysql 普通表转分区表)