久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

142次閱讀
沒有評論

共計 2840 個字符,預計需要花費 8 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

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

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

如果分區(qū)字段沒有包含在主鍵字段內(nèi),如表 A 的主鍵為 ID, 分區(qū)字段為 createtime,按時間范圍分區(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);

錯誤提示:#1503

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

MySQL 主鍵的限制,每一個分區(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 會這樣考慮,CSDN 的斑竹是這么解釋的:

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

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

方法 1:

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

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);

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

方法 2:

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

測試如下:

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);

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

繼續(xù)添加上主鍵

alter table t1 add PRIMARY KEY(ID)

錯誤 1503,和前面一樣的錯誤。

alter table t1 add PRIMARY KEY(ID,createtime)

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

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

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

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

以上是如何解決 mysql 添加分區(qū)出錯的問題的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業(yè)資訊頻道!

向 AI 問一下細節(jié)

丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-12-18發(fā)表,共計2840字。
轉(zhuǎn)載說明:除特殊說明外本站除技術相關以外文章皆由網(wǎng)絡搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 南丰县| 涞水县| 乐都县| 仙居县| 平利县| 奇台县| 庄浪县| 拉萨市| 遂平县| 北宁市| 鄂伦春自治旗| 泗阳县| 名山县| 昌图县| 新密市| 洱源县| 鄂温| 永泰县| 龙山县| 嘉善县| 浦北县| 中卫市| 大兴区| 东明县| 石屏县| 永平县| 浦北县| 阳信县| 武平县| 托克托县| 赣州市| 许昌市| 咸宁市| 南汇区| 前郭尔| 广饶县| 承德市| 翁源县| 龙游县| 边坝县| 乌兰浩特市|