【问题标题】:mysql partition without unique field没有唯一字段的mysql分区
【发布时间】:2012-04-26 10:33:43
【问题描述】:

我想对我的表进行分区。 表格是:

create_table "multimedia", :force => true do |t|     
   t.integer   "id"   
   t. binary   "data"    
   t.integer   "device_id"         
   t.datetime  "created_at"                  
end

id 是主键
created_at 是表的简单索引,没有唯一性

我需要按字段 created_at 对表进行分区。在我的表中只有过去 7 天的记录,所以我想按天对它进行分区。我写了这个角色:

partition by range (to_days(created_at))          

  ( PARTITION p20120417 VALUES LESS THAN (to_days('2012-04-17 23:59:59 +0200')),                   
    PARTITION p20120418 VALUES LESS THAN (to_days('2012-04-18 23:59:59 +0200')),                
    PARTITION p20120419 VALUES LESS THAN (to_days('2012-04-19 23:59:59 +0200')),              
    PARTITION p20120420 VALUES LESS THAN (to_days('2012-04-20 23:59:59 +0200')),               
    PARTITION p20120421 VALUES LESS THAN (to_days('2012-04-21 23:59:59 +0200')),             
    PARTITION p20120422 VALUES LESS THAN (to_days('2012-04-22 23:59:59 +0200')),                  
    PARTITION p20120423 VALUES LESS THAN (to_days('2012-04-23 23:59:59 +0200')),                    
    PARTITION p20120424 VALUES LESS THAN (to_days('2012-04-24 23:59:59 +0200'))                
);  

代码给我这个错误:

主键必须包含表分区中的所有列 功能

我需要该表仅由 created_at 分区并且它不能是唯一的。

我该怎么办?

【问题讨论】:

  • 欢迎来到 Stack Overflow。您可以使用{} 工具栏按钮格式化源代码块(或为所有行添加一个 4 字符缩进)。这次我替你做了。

标签: mysql database-partitioning


【解决方案1】:

制作你的主键 (id, created_at),因为 id 是唯一的,所以它保证是唯一的。然后你可以使用 created_at 作为你的表分区标准。

【讨论】:

    猜你喜欢
    • 2017-04-15
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多