2012-11-05 11 views
1

Is Partition BY RANGE不能應用於具有自動遞增主鍵的表嗎? 我在問這是因爲看到了一些(1,2)create table語句的例子,它沒有主鍵定義。也是我創建表語句給我的錯誤:MySQL分區BY RANGE不適用於主鍵?

A PRIMARY KEY must include all columns in the table's partitioning function

這裏是我的發言

CREATE TABLE `tbl_point` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `cord_x` double DEFAULT NULL, 
    `cord_y` double DEFAULT NULL, 
    `angle` int DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) 
PARTITION BY RANGE (angle) (
    PARTITION p0 VALUES LESS THAN (91), 
    PARTITION p1 VALUES LESS THAN (181), 
    PARTITION p2 VALUES LESS THAN (271), 
    PARTITION p3 VALUES LESS THAN (361) 
) 

還有一個問題:能角度欄是double類型的?因爲當我將它設置爲雙倍時出現此錯誤:

The PARTITION function returns the wrong type

謝謝。

回答

1

第一條錯誤消息是相當明確的:

A PRIMARY KEY must include all columns in the table's partitioning function

你必須通過你的主鍵的分區,或包括angle在主鍵

我想你不希望是後者,所以前者是解決方案。

至於第二個錯誤:

The PARTITION function returns the wrong type

事實上,分區功能(在這裏,「angle」是所謂的「功能」,認爲它是身份的功能)必須返回一個整數,如上所述in the manual

A partitioning key must be either an integer column or an expression that resolves to an integer.

+0

所以不可能有雙角度的角度?因爲cast()函數不提供double類型 – andriy

+0

@Andriy相反,如果將'angle'定義爲'DOUBLE',則需要將其轉換爲整型:'PARTITION BY RANGE(CAST(角度已簽署))'。儘管如此,這並不能解決第一個問題,即'angle'需要成爲主鍵的一部分。 – RandomSeed

+0

現在是主鍵的一部分。謝謝 – andriy