最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL分區(qū)表語法解讀

 更新時(shí)間:2025年02月18日 10:45:33   作者:Why9310  
MySQL分區(qū)表主要用于提高查詢效率,通過將數(shù)據(jù)分割成更小的部分進(jìn)行管理,文章詳細(xì)介紹了如何創(chuàng)建、查詢、修改和存儲(chǔ)分區(qū)表,包括創(chuàng)建復(fù)合主鍵、按年份和月份分區(qū)、刪除分區(qū)、查詢分區(qū)數(shù)據(jù)以及利用存儲(chǔ)過程批量轉(zhuǎn)換非分區(qū)表為分區(qū)表等方法

MySQL分區(qū)表語法

1.創(chuàng)建分區(qū)表

分區(qū)鍵需要和主鍵設(shè)置為復(fù)合主鍵,分區(qū)表不可直接轉(zhuǎn)換成非分區(qū)表,需要重新建非分區(qū)表并導(dǎo)入數(shù)據(jù)

  • 按年份
CREATE TABLE partitioned_table_year (
    id INT,
    content VARCHAR(50),
    created_time DATETIME,
                PRIMARY KEY (id,created_time)
) PARTITION BY RANGE(YEAR(created_time)) ( 
    PARTITION p2024 VALUES LESS THAN (2025),
    PARTITION p2025 VALUES LESS THAN (2026),
    PARTITION p2026 VALUES LESS THAN (2027)
);
  • 按月份
CREATE TABLE partitioned_table_month (
    id INT,
    content VARCHAR(50),
    created_time DATETIME,
                PRIMARY KEY (id,created_time)
) PARTITION BY RANGE  COLUMNS(created_time)  (  
    PARTITION p202410 VALUES LESS THAN ('2024-11-01'),
    PARTITION p202411 VALUES LESS THAN ('2024-12-01'), 
    PARTITION p202412 VALUES LESS THAN ('2025-01-01')
);
  • 修改表結(jié)構(gòu),增加分區(qū)
ALTER TABLE `partitioned_table_month` MODIFY COLUMN `created_time` datetime(0) NOT NULL ,
DROP PRIMARY KEY,
ADD PRIMARY KEY (`id`, `created_time`) USING BTREE;

ALTER TABLE partitioned_table_month PARTITION BY RANGE COLUMNS(created_time) (  
    PARTITION p202410 VALUES LESS THAN ('2024-11-01'),
    PARTITION p202411 VALUES LESS THAN ('2024-12-01'), 
    PARTITION p202412 VALUES LESS THAN ('2025-01-01')
                 );
  • 刪除分區(qū),注意:刪除分區(qū)的時(shí)候會(huì)同時(shí)刪除數(shù)據(jù)
ALTER TABLE partitioned_table_month DROP PARTITION p202407,p202408;

2.查詢

  • 查看表分區(qū)
SELECT  
    TABLE_NAME,
    PARTITION_NAME, 
    PARTITION_METHOD, 
    PARTITION_EXPRESSION, 
    PARTITION_DESCRIPTION,
    TABLE_ROWS,
    AVG_ROW_LENGTH,
    DATA_LENGTH,
    INDEX_LENGTH 
FROM 
    information_schema.PARTITIONS
WHERE 
    TABLE_SCHEMA = 'xxx' and TABLE_NAME = 'partitioned_table_month';  
  • 查看分區(qū)數(shù)據(jù)
select * from partitioned_table PARTITION (p2024,p2025)

3.利用存儲(chǔ)過程批量修改非分區(qū)表為分區(qū)表

  • 創(chuàng)建聯(lián)合主鍵存儲(chǔ)過程,先設(shè)置聯(lián)合主鍵字段非空,再刪除原id去掉主鍵,再設(shè)置聯(lián)合主鍵
DELIMITER $$
DROP PROCEDURE IF EXISTS auto_create_pk$$
CREATE PROCEDURE `auto_create_pk`(IN `table_name` varchar(64),IN `column_name` varchar(64),IN `column_comment` varchar(64))
BEGIN
	  SET @sql = CONCAT("ALTER TABLE `",table_name,"` MODIFY COLUMN `",column_name,"` datetime  NOT NULL COMMENT '",column_comment,"',
		DROP PRIMARY KEY,
		ADD PRIMARY KEY ( `id`, `",column_name,"` ) USING BTREE;");
		PREPARE stmt FROM @sql;
		EXECUTE stmt;
		DEALLOCATE PREPARE stmt;
END$$ 
DELIMITER ;
  • 創(chuàng)建按年自動(dòng)分區(qū)存儲(chǔ)過程
DELIMITER $$
DROP PROCEDURE IF EXISTS auto_create_partition_year$$
CREATE PROCEDURE `auto_create_partition_year`(IN `table_name` varchar(64),IN `column_name` varchar(64))
BEGIN
		DECLARE partitioned LONGTEXT;
		DECLARE n INT;
		set n = 2025;
		set partitioned = '';
		WHILE n <= 2027 DO
			SET partitioned = CONCAT(partitioned,",PARTITION p",n," VALUES LESS THAN (",n+1,")");
			SET n = n + 1;
			END WHILE;  
		SET @sql = CONCAT ("ALTER TABLE ",table_name,"  PARTITION BY RANGE(YEAR(",column_name,")) (",SUBSTR(partitioned,2,LENGTH(partitioned)),");") ; 
		PREPARE stmt FROM @sql;
		EXECUTE stmt;
		DEALLOCATE PREPARE stmt;
END$$ 
DELIMITER ;
  • 創(chuàng)建按月自動(dòng)分區(qū)存儲(chǔ)過程
DELIMITER $$
DROP PROCEDURE IF EXISTS auto_create_partition_month$$
CREATE PROCEDURE `auto_create_partition_month`(IN `table_name` varchar(64),IN `column_name` varchar(64))
BEGIN
		DECLARE partitioned LONGTEXT;
		DECLARE n INT;
		DECLARE m INT;
		set n = 2015;
		set partitioned = '';
		WHILE n <= 2030 DO
		set m = 1;
			WHILE m < 12 DO
				SET partitioned = CONCAT(partitioned,",PARTITION p",n,LPAD(m,2,0)," VALUES LESS THAN ('",n,"-",LPAD(m+1,2,0),"-01')");
				SET m = m + 1;
			END WHILE;  
			IF m = 12 THEN 
				SET partitioned = CONCAT(partitioned,",PARTITION p",n,"12 VALUES LESS THAN ('",n+1,"-01-01')");
			END IF;
			SET n = n + 1;
			END WHILE;   
		SET @sql = CONCAT ("ALTER TABLE ",table_name,"  PARTITION BY RANGE COLUMNS(",column_name,")  (",SUBSTR(partitioned,2,LENGTH(partitioned)),");") ; 
		PREPARE stmt FROM @sql;
		EXECUTE stmt;
		DEALLOCATE PREPARE stmt;
END$$ 
DELIMITER ;
-- 查詢存儲(chǔ)過程
show procedure status like 'auto_create_partition%';
-- 執(zhí)行聯(lián)合主鍵
CALL auto_create_pk('table_a','a_time','時(shí)間'); 
-- 執(zhí)行按年自動(dòng)分區(qū)
CALL auto_create_partition_year('table_b','b_time'); 
-- 執(zhí)行按月自動(dòng)分區(qū)
CALL auto_create_partition_month('table_c','c_time'); 

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL忘記密碼恢復(fù)密碼的實(shí)現(xiàn)方法

    MySQL忘記密碼恢復(fù)密碼的實(shí)現(xiàn)方法

    流傳較廣的方法,mysql中文參考手冊(cè)上的,各位vps主機(jī)租用客戶和服務(wù)器托管用戶忘記mysql5.1管理員密碼時(shí),可以使用這種方法破解下
    2008-07-07
  • MySQL處理重復(fù)數(shù)據(jù)插入的處理方案

    MySQL處理重復(fù)數(shù)據(jù)插入的處理方案

    在數(shù)據(jù)庫操作中,處理重復(fù)數(shù)據(jù)插入是一個(gè)常見的需求,特別是在批量插入數(shù)據(jù)時(shí),可能會(huì)遇到主鍵沖突或唯一鍵沖突(Duplicate entry)的情況,本文將以一個(gè)實(shí)際的Python MySQL數(shù)據(jù)庫操作為例,分析如何優(yōu)化異常處理邏輯,需要的朋友可以參考下
    2025-04-04
  • mysql中錯(cuò)誤:1093-You can’t specify target table for update in FROM clause的解決方法

    mysql中錯(cuò)誤:1093-You can’t specify target table for update in F

    最近在工作中遇到了一個(gè)mysql錯(cuò)誤提示1093:You can’t specify target table for update in FROM clause,后來通過查找相關(guān)的資料解決了這個(gè)問題,現(xiàn)在將解決的方法分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • MySQL 丟失數(shù)據(jù)的原因及解決

    MySQL 丟失數(shù)據(jù)的原因及解決

    這篇文章主要介紹了MySQL 丟失數(shù)據(jù)的原因及解決,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-05-05
  • MySQL查看用戶權(quán)限及權(quán)限管理的方法詳解

    MySQL查看用戶權(quán)限及權(quán)限管理的方法詳解

    在MySQL中,查看用戶權(quán)限可以通過多種方式實(shí)現(xiàn),主要取決于我們想要查看的權(quán)限類型和詳細(xì)程度,本文給大家介紹了MySQL查看用戶權(quán)限及權(quán)限管理的方法,并通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • MySQL表字段時(shí)間設(shè)置默認(rèn)值

    MySQL表字段時(shí)間設(shè)置默認(rèn)值

    很多人可能會(huì)把日期類型的字段的類型設(shè)置為 date或者 datetime,但是這些不是當(dāng)前時(shí)間,那么如何把字段時(shí)間設(shè)置成當(dāng)前時(shí)間,本文就具體來介紹一下
    2021-05-05
  • mysql 使用B+樹索引有哪些優(yōu)勢(shì)

    mysql 使用B+樹索引有哪些優(yōu)勢(shì)

    這篇文章主要介紹了mysql 使用B+樹索引有哪些優(yōu)勢(shì),幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-01-01
  • mysql 8.0.18 安裝配置優(yōu)化教程

    mysql 8.0.18 安裝配置優(yōu)化教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.18 安裝配置優(yōu)化教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Mysql?刪除重復(fù)數(shù)據(jù)保留一條有效數(shù)據(jù)(最新推薦)

    Mysql?刪除重復(fù)數(shù)據(jù)保留一條有效數(shù)據(jù)(最新推薦)

    這篇文章主要介紹了Mysql?刪除重復(fù)數(shù)據(jù)保留一條有效數(shù)據(jù),實(shí)現(xiàn)原理也很簡(jiǎn)單,mysql刪除重復(fù)數(shù)據(jù),多個(gè)字段分組操作,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • CentOS6.9下mysql 5.7.17安裝配置方法圖文教程

    CentOS6.9下mysql 5.7.17安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了CentOS6.9下mysql 5.7.17安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評(píng)論

吉木萨尔县| 和硕县| 阿拉善盟| 康平县| 郁南县| 清徐县| 延津县| 西充县| 弥勒县| 祁阳县| 盐亭县| 色达县| 湘阴县| 高唐县| 九江市| 公安县| 柳林县| 奇台县| 峨眉山市| 栖霞市| 铅山县| 衡南县| 拜泉县| 柞水县| 丹凤县| 祁门县| 青铜峡市| 互助| 江安县| 沿河| 普安县| 云霄县| 靖远县| 郸城县| 苗栗县| 镇原县| 冷水江市| 延吉市| 项城市| 绥德县| 阳江市|