2012-06-12 40 views
1

我試圖創建下表下方,分區語法mysql包含錯誤?

CREATE TABLE IF NOT EXISTS `hashes` (
    `hash` binary(20) NOT NULL, 
    `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `category` tinyint(1) unsigned NOT NULL DEFAULT '0', 
    `indexed` tinyint(1) unsigned NOT NULL DEFAULT '0', 
    `dcma` tinyint(1) unsigned NOT NULL DEFAULT '0', 
    PRIMARY KEY (`hash`), 
    KEY `category` (`category`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci, 
PARTITION BY LIST(`category`)( 
    PARTITION p0 VALUES IN(0), 
    PARTITION p1 VALUES IN(1), 
    PARTITION p2 VALUES IN(2), 
    PARTITION p3 VALUES IN(3), 
    PARTITION p4 VALUES IN(4), 
    PARTITION p5 VALUES IN(5), 
    PARTITION p6 VALUES IN(6), 
); 

分區是列category它是一個tinyint(1)每個數字對應一個類別。據我所知,我不能通過枚舉進行分區,但我認爲這種方式會起作用嗎?

我哪裏錯了?

編輯

錯誤如下,

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PARTITION BY LIST(`category`)(PARTITION p0 VALUES IN(0), PARTITION ' at line 10 
+0

運行此錯誤時,會出現什麼錯誤? –

+0

編輯並感謝您的幫助:) – Griff

回答

2

有兩個語法錯誤。試試這個代碼 -

CREATE TABLE IF NOT EXISTS `hashes`(
     `hash` BINARY(20) NOT NULL, 
     `name` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
     `category` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', 
     `indexed` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', 
     `dcma` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', 
--  PRIMARY KEY (`hash`), 
     KEY `category` (`category`) 
    ) 
    ENGINE = INNODB 
    DEFAULT CHARSET = utf8 
    COLLATE = utf8_unicode_ci 
    PARTITION BY LIST (`category`) (
     PARTITION p0 VALUES IN (0), 
     PARTITION p1 VALUES IN (1), 
     PARTITION p2 VALUES IN (2), 
     PARTITION p3 VALUES IN (3), 
     PARTITION p4 VALUES IN (4), 
     PARTITION p5 VALUES IN (5), 
     PARTITION p6 VALUES IN (6) 
    ); 

請注意,我已經註釋掉了主鍵定義。分區有一些限制,其中之一 - 在分區表的分區表中使用的所有列必須是該表可能具有的每個唯一鍵的一部分。換句話說,表中的每個唯一鍵必須使用表分區表達式中的每一列。

更多的信息在這裏 - Partitioning Keys, Primary Keys, and Unique Keys

+0

謝謝你這幫了我很多:) – Griff

0

我認爲你有一個額外的逗號,如果這是你的代碼的精確拷貝。

PARTITION BY LIST(`category`)( 
    PARTITION p0 VALUES IN(0), 
    PARTITION p1 VALUES IN(1), 
    PARTITION p2 VALUES IN(2), 
    PARTITION p3 VALUES IN(3), 
    PARTITION p4 VALUES IN(4), 
    PARTITION p5 VALUES IN(5), 
    PARTITION p6 VALUES IN(6), 
); 

刪除最後一個逗號