我需要每天根据UTC时间戳对我的表进行分区,我得到错误 Fatal error: A PRIMARY KEY must include all columns in the table's partitioning function
我这样做,列id是INT PRIMARY KEY列date是INT存储UTC时间戳
我的桌子结构 DESCRIBE stats;
Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
date int(11) YES NULL
.
.
.
.
Run Code Online (Sandbox Code Playgroud)
创建表结构 SHOW CREATE TABLE stats
CREATE TABLE `stats` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` int(11) DEFAULT NULL,
.
.
.
.
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=371 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
Run Code Online (Sandbox Code Playgroud)
我通过php执行脚本
$today = strtotime("today midnight");
$partition = date('d_m_y',$today);
ALTER TABLE `stats`
PARTITION BY RANGE (date) (
PARTITION p_$partition VALUES LESS THAN ($today)
)
Run Code Online (Sandbox Code Playgroud)
我试过这个,但得到语法错误
ALTER TABLE `stats`
UNIQUE KEY (`id`)
PARTITION BY RANGE (date) (
PARTITION p_$partition VALUES LESS THAN ($today)
)
ALTER TABLE `stats`
PRIMARY KEY (`id`)
PARTITION BY RANGE (date) (
PARTITION p_$partition VALUES LESS THAN ($today)
)
ALTER TABLE `stats`
PRIMARY KEY (`id`,`date`)
PARTITION BY RANGE (date) (
PARTITION p_$partition VALUES LESS THAN ($today)
)
Run Code Online (Sandbox Code Playgroud)
也试过HASH但同样的错误A PRIMARY KEY must include all columns in the table's partitioning function in
ALTER TABLE stats
PARTITION BY HASH(date)
PARTITIONS 1
Run Code Online (Sandbox Code Playgroud)
也试过这种方式,但得到了错误 Fatal error: Partition management on a not partitioned table is not possible
ALTER TABLE `stats`
ADD PARTITION (
PARTITION p_$partition VALUES LESS THAN ($today)
)
Run Code Online (Sandbox Code Playgroud)
请参阅并建议任何可能的方法来执行此操作.
谢谢
我通过添加date主键解决了这个问题id.
ALTER TABLE `stats` DROP PRIMARY KEY, ADD PRIMARY KEY(`id`,`date`);
Run Code Online (Sandbox Code Playgroud)
现在表已成功分区.
希望它也能帮助别人.
谢谢
| 归档时间: |
|
| 查看次数: |
2731 次 |
| 最近记录: |