如何解決mysql添加分區(qū)出錯(cuò)的問題

這篇文章主要介紹如何解決MySQL添加分區(qū)出錯(cuò)的問題,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),貴南企業(yè)網(wǎng)站建設(shè),貴南品牌網(wǎng)站建設(shè),網(wǎng)站定制,貴南網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,貴南網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

mysql添加分區(qū)出錯(cuò),報(bào)“1503”錯(cuò)誤的原因:每一個(gè)分區(qū)表中的公式中的列,必須在主鍵“unique key”中包括,否則就報(bào)錯(cuò);解決方法:先使用“PRIMARY KEY”關(guān)鍵字創(chuàng)建一個(gè)復(fù)合主鍵,將分區(qū)字段加入到主鍵中,再進(jìn)行分區(qū)操作。

如果分區(qū)字段沒有包含在主鍵字段內(nèi),如表A的主鍵為ID,分區(qū)字段為createtime ,按時(shí)間范圍分區(qū),代碼如下:

CREATE TABLE T1 (
     id int(8) NOT NULL AUTO_INCREMENT,
     createtime datetime NOT NULL,
      PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
PARTITION BY RANGE(TO_DAYS (createtime))
(
PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')),
PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')),
PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')),
PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')),
PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')),
PARTITION p19 VALUES LESS ThAN  MAXVALUE);

錯(cuò)誤提示:#1503

A PRIMARY KEY MUST INCLUDE ALL COLUMNS IN THE TABLE'S PARTITIONING FUNCTION

MySQL主鍵的限制,每一個(gè)分區(qū)表中的公式中的列,必須在主鍵“unique key”中包括

在MYSQL的官方文檔里是這么說明的

18.5.1. Partitioning Keys, Primary Keys, and Unique Keys

This section discusses the relationship of partitioning keys with primary keys and unique keys. The rule governing this relationship can be expressed as follows: All columns used in the partitioning expression for a partitioned table must be part of every unique key that the table may have.

In other words,every unique key on the table must use every columnin the table's partitioning expression. (This also includes the table's primary key, since it is by definition a unique key. This particular case is discussed later in this section.) For example, each of the following table creation statements is invalid:

分區(qū)字段必須包含在主鍵字段內(nèi),至于為什么MYSQL會(huì)這樣考慮,CSDN的斑竹是這么解釋的:

為了確保主鍵的效率。否則同一主鍵區(qū)的東西一個(gè)在A分區(qū),一個(gè)在B分區(qū),顯然會(huì)比較麻煩。 copyright

下面討論解決辦法,畢竟在一張表里,日期做主鍵的還是不常見。

方法1:

順應(yīng)MYSQL的要求,就把分區(qū)字段加入到主鍵中,組成復(fù)合主鍵

CREATE TABLE T1 (
     id int(8) NOT NULL AUTO_INCREMENT,
     createtime datetime NOT NULL,
      PRIMARY KEY (id,createtime)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
PARTITION BY RANGE(TO_DAYS (createtime))
(
PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')),
PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')),
PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')),
PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')),
PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')),
PARTITION p19 VALUES LESS ThAN  MAXVALUE);

測(cè)試通過,分區(qū)成功。

方法2:

既然MYSQL要把分區(qū)字段包含在主鍵內(nèi)才能創(chuàng)建分區(qū),那么在創(chuàng)建表的時(shí)候,先不指定主鍵字段,是否可以呢??

測(cè)試如下:

CREATE TABLE T1 (
     id int(8) NOT NULL ,
     createtime datetime NOT NULL
      ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
PARTITION BY RANGE(TO_DAYS (createtime))
(
PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')),
PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')),
PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')),
PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')),
PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')),
PARTITION p19 VALUES LESS ThAN  MAXVALUE);

測(cè)試通過,分區(qū)成功。OK copyright

繼續(xù)添加上主鍵

alter table t1 add PRIMARY KEY(ID)

錯(cuò)誤1503,和前面一樣的錯(cuò)誤。

alter table t1 add PRIMARY KEY(ID,createtime)

創(chuàng)建主鍵成功,但還是復(fù)合主鍵,看來是沒辦法了,必須聽指揮了。

主鍵創(chuàng)建成功,把ID加上自增字段設(shè)置

alter table t1 change id id int not null auto_increment;
alter table t1 auto_increment=1;

最后結(jié)論,MYSQL的分區(qū)字段,必須包含在主鍵字段內(nèi)。

以上是如何解決mysql添加分區(qū)出錯(cuò)的問題的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

本文標(biāo)題:如何解決mysql添加分區(qū)出錯(cuò)的問題
本文URL:http://muchs.cn/article20/ipioco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、全網(wǎng)營銷推廣、定制網(wǎng)站、做網(wǎng)站、微信公眾號(hào)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)