<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_logG;
*************************** 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