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

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

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

MySQL分區(qū)表語法

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

分區(qū)鍵需要和主鍵設置為復合主鍵,分區(qū)表不可直接轉換成非分區(qū)表,需要重新建非分區(qū)表并導入數(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')
);
  • 修改表結構,增加分區(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ù)據(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.利用存儲過程批量修改非分區(qū)表為分區(qū)表

  • 創(chuàng)建聯(lián)合主鍵存儲過程,先設置聯(lián)合主鍵字段非空,再刪除原id去掉主鍵,再設置聯(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)建按年自動分區(qū)存儲過程
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)建按月自動分區(qū)存儲過程
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 ;
-- 查詢存儲過程
show procedure status like 'auto_create_partition%';
-- 執(zhí)行聯(lián)合主鍵
CALL auto_create_pk('table_a','a_time','時間'); 
-- 執(zhí)行按年自動分區(qū)
CALL auto_create_partition_year('table_b','b_time'); 
-- 執(zhí)行按月自動分區(qū)
CALL auto_create_partition_month('table_c','c_time'); 

總結

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

相關文章

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

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

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

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

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

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

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

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

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

    MySQL查看用戶權限及權限管理的方法詳解

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

    MySQL表字段時間設置默認值

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

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

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

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

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

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

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

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

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

最新評論

丽水市| 阿拉善右旗| 白河县| 福清市| 古田县| 莫力| 延川县| 腾冲县| 崇左市| 汶上县| 和田县| 佛山市| 台南市| 新密市| 江安县| 万载县| 郑州市| 屯门区| 德安县| 越西县| 兰坪| 铜山县| 平南县| 育儿| 招远市| 永仁县| 吉林省| 苍南县| 宜丰县| 黄浦区| 古交市| 涿州市| 左贡县| 商洛市| 壶关县| 马鞍山市| 崇义县| 天峻县| 沂源县| 兴国县| 西充县|