91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決mysql添加分區出錯的問題

發布時間:2020-10-22 12:44:34 來源:億速云 閱讀:677 作者:小新 欄目:MySQL數據庫

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

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

如果分區字段沒有包含在主鍵字段內,如表A的主鍵為ID,分區字段為createtime ,按時間范圍分區,代碼如下:

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主鍵的限制,每一個分區表中的公式中的列,必須在主鍵“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:

分區字段必須包含在主鍵字段內,至于為什么MYSQL會這樣考慮,CSDN的斑竹是這么解釋的:

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

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

方法1:

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

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

測試通過,分區成功。

方法2:

既然MYSQL要把分區字段包含在主鍵內才能創建分區,那么在創建表的時候,先不指定主鍵字段,是否可以呢??

測試如下:

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

測試通過,分區成功。OK copyright

繼續添加上主鍵

alter table t1 add PRIMARY KEY(ID)

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

alter table t1 add PRIMARY KEY(ID,createtime)

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

主鍵創建成功,把ID加上自增字段設置

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

最后結論,MYSQL的分區字段,必須包含在主鍵字段內。

以上是如何解決mysql添加分區出錯的問題的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

文山县| 廊坊市| 涿州市| 咸宁市| 宣恩县| 河津市| 堆龙德庆县| 莆田市| 彝良县| 伊金霍洛旗| 达州市| 玉屏| 商河县| 孟村| 江门市| 扶风县| 大港区| 饶阳县| 土默特右旗| 吉水县| 安徽省| 肇东市| 翼城县| 论坛| 阳高县| 施甸县| 普兰县| 天全县| 广宁县| 五大连池市| 福州市| 二连浩特市| 吴堡县| 嘉祥县| 深水埗区| 察雅县| 新蔡县| 拜城县| 湘乡市| 普兰县| 彭水|