国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【mysql表分區(qū)系】mysql創(chuàng)建分區(qū)表提示A PRIMARY KEY must include all columns in the table‘s partitioning function

這篇具有很好參考價值的文章主要介紹了【mysql表分區(qū)系】mysql創(chuàng)建分區(qū)表提示A PRIMARY KEY must include all columns in the table‘s partitioning function。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

首先聲明下我這邊使用的mysql版本是5.7.29版本,當(dāng)然下面的問題我這邊也是基于這個版本。這里因為沒有考證其他版本是否也會有這些問題,可自行官方文檔來查閱資料

一個唯一鍵必須包含表分區(qū)函數(shù)所有的列,根據(jù)這個錯誤提示我們大概就知道怎么處理,但是why?我們還是沉下心來看下官網(wǎng)文檔

關(guān)于主鍵和唯一鍵的限制

MySQL :: MySQL 5.7 Reference Manual :: 22.6.1 Partitioning Keys, Primary Keys, and Unique Keys

his 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 column in 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.)?

這段話大致概括的意思就是說我們的分區(qū)表,主鍵和唯一鍵必須包含分區(qū)表達(dá)式的所有列。反過來講,分區(qū)表達(dá)式中的列至少有一個是聯(lián)合主鍵和聯(lián)合唯一鍵的某一列。

用官網(wǎng)的例子解釋下

這個是錯誤的創(chuàng)建語句


CREATE TABLE t1 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1, col2)
)
PARTITION BY HASH(col3)
PARTITIONS 4;

CREATE TABLE t2 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1),
    UNIQUE KEY (col3)
)
PARTITION BY HASH(col1 + col3)
PARTITIONS 4;

執(zhí)行后,錯誤提示

?A PRIMARY KEY must include all columns in the table's partitioning function

【mysql表分區(qū)系】mysql創(chuàng)建分區(qū)表提示A PRIMARY KEY must include all columns in the table‘s partitioning function,數(shù)據(jù)庫,mysql,數(shù)據(jù)庫

根據(jù)上面官網(wǎng)大致概況的意思分析下上述分區(qū)表創(chuàng)建錯誤原因

t1表中UNIQUE KEY (col1, col2) 聯(lián)合唯一鍵沒有包含分區(qū)表達(dá)式HASH(col3) col3這一列,所以報錯

t2標(biāo)中?UNIQUE KEY (col1), UNIQUE KEY (col3) 兩個唯一鍵沒有包含分區(qū)表達(dá)式HASH(col1 + col3) 所有的列

這個是糾正后的創(chuàng)建語句

--col3是聯(lián)合唯一鍵的一列字段
CREATE TABLE t1 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1, col2, col3)
)
PARTITION BY HASH(col3)
PARTITIONS 4;

--UNIQUE KEY (col1, col3) 這個唯一鍵必須包含分區(qū)表達(dá)式所有的列字段
CREATE TABLE t2 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1, col3)
)
PARTITION BY HASH(col1 + col3)
PARTITIONS 4;

Since every primary key is by definition a unique key, this restriction also includes the table's primary key,

對于主鍵也是同樣的規(guī)則約束

這里就不用分析錯誤原因了同上面的聯(lián)合唯一鍵

CREATE TABLE t5 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    PRIMARY KEY(col1, col2)
)
PARTITION BY HASH(col3)
PARTITIONS 4;

CREATE TABLE t6 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    PRIMARY KEY(col1, col3),
    UNIQUE KEY(col2)
)
PARTITION BY HASH( YEAR(col2) )
PARTITIONS 4;

【mysql表分區(qū)系】mysql創(chuàng)建分區(qū)表提示A PRIMARY KEY must include all columns in the table‘s partitioning function,數(shù)據(jù)庫,mysql,數(shù)據(jù)庫

完整示例演示解決過程

那么下來我們就演示一個完整的例子來如何處理這種問題

創(chuàng)建并初始化訂單表

CREATE TABLE test_order (
    id INT NOT NULL ,
    order_no varchar(20) not null ,
    create_time DATE NOT NULL,
    PRIMARY KEY(id),
    UNIQUE KEY(order_no)
)ENGINE=InnoDB  DEFAULT CHARSET=utf8;

insert into  test_order  VALUES(1,'001','2023-01-01');
insert into  test_order  VALUES(2,'002','2023-02-01');
insert into  test_order  VALUES(3,'003','2023-03-01');

根據(jù)時間字段做分區(qū)

alter table test_order  partition by range (TO_DAYS(CREATE_TIME)) (

	partition p_202301 values less than (TO_DAYS('2023-02-01')),
	partition p_202302 values less than (TO_DAYS('2023-03-01')),
	partition p_202303 values less than (TO_DAYS('2023-04-01'))
);

【mysql表分區(qū)系】mysql創(chuàng)建分區(qū)表提示A PRIMARY KEY must include all columns in the table‘s partitioning function,數(shù)據(jù)庫,mysql,數(shù)據(jù)庫

?如何解決呢

--重建主鍵
alter table test_order DROP PRIMARY KEY, ADD PRIMARY key(ID,CREATE_TIME);

--重建唯一鍵(刪除原來的唯一索引,重新生成唯一鍵)
ALTER TABLE test_order DROP INDEX order_no, ADD UNIQUE KEY (`order_no`, `create_time`);

【mysql表分區(qū)系】mysql創(chuàng)建分區(qū)表提示A PRIMARY KEY must include all columns in the table‘s partitioning function,數(shù)據(jù)庫,mysql,數(shù)據(jù)庫

?看到這里,我們創(chuàng)建分區(qū)的sql已經(jīng)執(zhí)行成功了。

找到對應(yīng)數(shù)據(jù)目錄,我們也看到分區(qū)后數(shù)據(jù)idb文件的存儲文件,表分區(qū)創(chuàng)建好后,對應(yīng)的索引也會分區(qū)

【mysql表分區(qū)系】mysql創(chuàng)建分區(qū)表提示A PRIMARY KEY must include all columns in the table‘s partitioning function,數(shù)據(jù)庫,mysql,數(shù)據(jù)庫

這里強(qiáng)調(diào)一點,生產(chǎn)環(huán)境如果原來的表已經(jīng)存在業(yè)務(wù)數(shù)據(jù),并且業(yè)務(wù)量很大的情況下,我們還是要停機(jī)來處理創(chuàng)建表分區(qū),這個需要注意謹(jǐn)慎操作文章來源地址http://www.zghlxwxcb.cn/news/detail-736536.html

到了這里,關(guān)于【mysql表分區(qū)系】mysql創(chuàng)建分區(qū)表提示A PRIMARY KEY must include all columns in the table‘s partitioning function的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • oracle分區(qū)表創(chuàng)建(自動按年、月、日分區(qū))實戰(zhàn)

    oracle分區(qū)表創(chuàng)建(自動按年、月、日分區(qū))實戰(zhàn)

    前言:工作中有一張表一年會增長100多萬的數(shù)據(jù),量雖然不大,可是表字段多,所以一年下來也會達(dá)到 1G,而且只增不改,故考慮使用分區(qū)表來提高查詢性能,提高維護(hù)性。 oracle 11g 支持自動分區(qū),不過得在創(chuàng)建表時就設(shè)置好分區(qū)。 如果已經(jīng)存在的表需要改分區(qū)表,就需要將

    2024年02月02日
    瀏覽(28)
  • HiveSQL分區(qū)的作用及創(chuàng)建分區(qū)表案例演示(圖解)

    HiveSQL分區(qū)的作用及創(chuàng)建分區(qū)表案例演示(圖解)

    目錄 一、分區(qū)的作用 二、單級分區(qū)表 1.準(zhǔn)備工作 2.創(chuàng)建數(shù)據(jù)表 3.查詢數(shù)據(jù) 4.創(chuàng)建分區(qū)數(shù)據(jù)表 5.添加數(shù)據(jù) 5.1添加方式1:靜態(tài)分區(qū)(需要指定分區(qū)字段和值) 5.2添加方式2:動態(tài)分區(qū)(只需指定分區(qū)字段,分區(qū)字段相同的數(shù)據(jù)自動分配到同一個區(qū)) 三、多級分區(qū)表 1.準(zhǔn)備工作 2.創(chuàng)建分區(qū)

    2024年01月17日
    瀏覽(21)
  • mysql分區(qū)表:日期分區(qū)

    1.創(chuàng)建分區(qū)表 2.查看分區(qū) 3.添加分區(qū) 4.存儲過程:分區(qū)刪除與創(chuàng)建 5.事件定時 6.觸發(fā)器設(shè)計:子表每插入一行,總表獲得一行 7.創(chuàng)建索引 8.添加枚舉型字段

    2024年02月16日
    瀏覽(17)
  • Hive創(chuàng)建分區(qū)表并插入數(shù)據(jù)

    業(yè)務(wù)中經(jīng)常會遇到這種需求:數(shù)據(jù)每天全量更新,但是要求月底將數(shù)據(jù)單獨保存一份以供后期查詢某月節(jié)點的信息。這時就要考慮用到Hive的分區(qū)表實現(xiàn),即按照月份創(chuàng)建分區(qū)表,相當(dāng)于新的月份數(shù)據(jù)保存在新表,進(jìn)而實現(xiàn)保存了歷史數(shù)據(jù)。 分區(qū)表的創(chuàng)建本質(zhì)是在HDFS創(chuàng)建了一

    2024年02月07日
    瀏覽(22)
  • PostgreSQL按日期列創(chuàng)建分區(qū)表

    PostgreSQL按日期列創(chuàng)建分區(qū)表

    ? ? ? 在PostgreSQL中,實現(xiàn)自動創(chuàng)建分區(qū)表主要依賴于表的分區(qū)功能,這一功能從PostgreSQL 10開始引入。分區(qū)表可以幫助管理大量數(shù)據(jù),通過分布數(shù)據(jù)到不同的分區(qū)來提高查詢效率和數(shù)據(jù)維護(hù)的便捷性。以下是在PostgreSQL中自動創(chuàng)建分區(qū)表的一般步驟: 首先,你需要創(chuàng)建一個父表

    2024年02月21日
    瀏覽(17)
  • postgres分區(qū)表的創(chuàng)建-基于繼承

    參考文檔: http://postgres.cn/docs/12/ddl-partitioning.html 創(chuàng)建基于繼承的分區(qū)表的步驟 1 創(chuàng)建父表 2 創(chuàng)建子表,從父表繼承過來 3 創(chuàng)建函數(shù)及觸發(fā)器,使插入的數(shù)據(jù)根據(jù)規(guī)則,插入到對應(yīng)的子表中? -- 創(chuàng)建父表 -- 創(chuàng)建分區(qū)表,5個分區(qū)? -- 創(chuàng)建觸發(fā)器函數(shù),針對不同月份的數(shù)據(jù),落入

    2023年04月09日
    瀏覽(18)
  • 用好 mysql 分區(qū)表

    用好 mysql 分區(qū)表

    為了保證MySQL的性能,我們都建議mysql單表不要太大,也經(jīng)常有人問我這樣的問題,整體來說呢,建議是:單表小于2G,記錄數(shù)小于1千萬,十庫百表。如果但行記錄數(shù)非常小,那么記錄數(shù)可以再偏大些,反之,可能記錄數(shù)到百萬級別就開始變慢了。 那么,業(yè)務(wù)量在增長,數(shù)據(jù)

    2024年02月08日
    瀏覽(23)
  • MySQL 分區(qū)表設(shè)計

    1、分區(qū)表設(shè)計方案 當(dāng)設(shè)計 MySQL 分區(qū)表時,需要考慮以下幾個方面:分區(qū)策略、分區(qū)字段、分區(qū)數(shù)量和分區(qū)函數(shù)。下面是一個詳細(xì)的示例,展示了如何設(shè)計和執(zhí)行分區(qū)表的增刪改查操作。 設(shè)計分區(qū)表: 考慮一個訂單表的例子,我們可以按照訂單創(chuàng)建時間對表進(jìn)行范圍分區(qū)。

    2024年02月07日
    瀏覽(23)
  • mysql分區(qū)表 -列表分區(qū)(list prtition)

    示例,創(chuàng)建一張員工表按照employee_id進(jìn)行列表分區(qū): 查詢0號分區(qū): select * from employees partition(p0); select * from employees partition(p1); select * from employees partition(p0,p1); 和range分區(qū)一樣,可以使用alter table … add/drop partition新增/刪除分區(qū): ALTER TABLE employees ADD PARTITION(PARTITION p2 VALUES IN

    2024年02月16日
    瀏覽(27)
  • mysql~關(guān)于mysql分區(qū)表的測試

    mysql~關(guān)于mysql分區(qū)表的測試

    在MySQL 8.0中,可以通過創(chuàng)建自定義哈希函數(shù)來處理VARCHAR類型的字段,以便用作分區(qū)鍵。下面是一個簡單的示例,演示如何在MySQL8.0中創(chuàng)建自定義哈希函數(shù)來處理VARCHAR類型的字段 分區(qū)后的表效果 創(chuàng)建自定義哈希函數(shù): 在上面的示例中,我們創(chuàng)建了一個名為 custom_hash 的自定義

    2024年03月13日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包