MySQL分片

1.RANGE分區:app

CREATE TABLE apps(
        id int PRIMARY KEY AUTO_INCREMENT,
        trackName varchar(30) NOT NULL,
        seoName varchar(30) NOT NULL,
        des varchar(100) NOT NULL
)engine=innodb  default charset=utf8
PARTITION BY RANGE(id)(
       PARTITION p0 VALUES LESS THAN(3),
       PARTITION p1 VALUES LESS THAN(6),
       PARTITION p2 VALUES LESS THAN(9),
       PARTITION p3 VALUES LESS THAN(12)
);seo

 

2.LIST分區hash

CREATE TABLE apps(
        id int PRIMARY KEY AUTO_INCREMENT,
        trackName varchar(30) NOT NULL,
        seoName varchar(30) NOT NULL,
        des varchar(100) NOT NULL
)engine=innodb  default charset=utf8
       PARTITION BY RANGE(id)(
       PARTITION p0 VALUES LESS THAN(3),
       PARTITION p1 VALUES LESS THAN(6),
       PARTITION p2 VALUES LESS THAN(9),
       PARTITION p3 VALUES LESS THAN(12)
);it

 

3.HASH分區io

CREATE TABLE apps(
        id int PRIMARY KEY AUTO_INCREMENT,
        trackName varchar(30) NOT NULL,
        seoName varchar(30) NOT NULL,
        buyDate DATE NOT NULL,
        des varchar(100) NOT NULL
)engine=innodb AUTO_INCREMENT=1 default charset=utf8
PARTITION BY HASH(YEAR(buyDate))
 PARTITIONS 10;innodb

hash分區會報錯「1503:A PRIMARY KEY must include all columns in the table's partitioning function」,意思是分區字段必須包含在主鍵字段內;table

解決方案:建立表的時候先不指定主鍵,建立表以後再把分區字段和id指定成複合主鍵:function

1.建立沒有主鍵的表:db

CREATE TABLE apps(
        id int NOT NULL ,
        trackName varchar(30) NOT NULL,
        seoName varchar(30) NOT NULL,
        buyDate DATE NOT NULL,
        des varchar(100) NOT NULL
)engine=innodb AUTO_INCREMENT=1 default charset=utf8
PARTITION BY HASH(YEAR(buyDate))
 PARTITIONS 10;tab

2.添加上符合主鍵:

alert table apps add PAIMARY KEY(id,buyDate);

相關文章
相關標籤/搜索