达梦数据库对现有表创建分区

1.思路

达梦数据库不支持在现有表的基础上创建分区,只能通过创建临时表来转换解决。创建方式如下(数据库名为:LYLP)

2.数据库现有表

例如现在数据库中有一个YP_USER表,DDL如下

CREATE TABLE "LYLP"."YP_USER"
(
	"ID" VARCHAR(32) NOT NULL,
	"USER_NAME" VARCHAR(32),
	"SEX" VARCHAR(10),
	"AGE" INT,
	"CREATE_TIME" TIMESTAMP(0) NOT NULL,
	"LAST_MODIFY_TIME" TIMESTAMP(0),
	"IS_DELETE" BIT NOT NULL,
	NOT CLUSTER PRIMARY KEY("ID")
);

CREATE UNIQUE  INDEX "INDEX5546873216276677" ON "LYLP"."YP_USER"("ID" ASC);

插入数据

INSERT INTO "LYLP"."YP_USER"(ID,USER_NAME,SEX,AGE,CREATE_TIME,LAST_MODIFY_TIME,IS_DELETE) VALUES 
	('1', '张三1','男', 25, '2018-05-05 00:00:00', '2018-05-05 00:00:00', 0),
	('2', '张三2','男', 25, '2019-05-05 00:00:00', '2019-05-05 00:00:00', 0),
	('3', '张三3','男', 25, '2020-05-05 00:00:00', '2020-05-05 00:00:00', 0),
	('4', '张三4','男', 25, '2021-05-05 00:00:00', '2021-05-05 00:00:00', 0),
	('5', '张三5','男', 25, '2022-05-05 00:00:00', '2022-05-05 00:00:00', 0),
	('6', '张三6','男', 25, '2023-05-05 00:00:00', '2023-05-05 00:00:00', 0),
	('7', '张三7','男', 25, '2024-05-05 00:00:00', '2024-05-05 00:00:00', 0),
	('8', '张三8','男', 25, '2025-05-05 00:00:00', '2025-05-05 00:00:00', 0),
	('9', '张三9','男', 25, '2026-05-05 00:00:00', '2026-05-05 00:00:00', 0),
	('10', '张三10','男', 25, '2027-05-05 00:00:00', '2027-05-05 00:00:00', 0),
	('11', '张三11','男', 25, '2028-05-05 00:00:00', '2028-05-05 00:00:00', 0),
	('12', '张三12','男', 25, '2029-05-05 00:00:00', '2029-05-05 00:00:00', 0),
	('13', '张三13','男', 25, '2030-05-05 00:00:00', '2030-05-05 00:00:00', 0),
	('14', '张三14','男', 25, '2031-05-05 00:00:00', '2031-05-05 00:00:00', 0);

commit;

3.创建YP_USER临时表

第一步就是创建一个YP_USER零食表,表明为"YP_USER_TMP",临时表需要创建分区,DDL如下

	CREATE TABLE "LYLP"."YP_USER_TMP"
(
	"ID" VARCHAR(32) NOT NULL,
	"USER_NAME" VARCHAR(32),
	"SEX" VARCHAR(10),
	"AGE" INT,
	"CREATE_TIME" TIMESTAMP(0) NOT NULL,
	"LAST_MODIFY_TIME" TIMESTAMP(0),
	"IS_DELETE" BIT NOT NULL,
	NOT CLUSTER PRIMARY KEY("ID", "CREATE_TIME")
)
PARTITION BY RANGE (CREATE_TIME)
(
	PARTITION LESSTHAN2019 VALUES LESS THAN (to_date('2019-01-01')),
	PARTITION PAR2019 VALUES LESS THAN (to_date('2020-01-01')),
	PARTITION PAR2020 VALUES LESS THAN (to_date('2021-01-01')),
	PARTITION PAR2021 VALUES LESS THAN (to_date('2022-01-01')),
	PARTITION PAR2022 VALUES LESS THAN (to_date('2023-01-01')),
	PARTITION PAR2023 VALUES LESS THAN (to_date('2024-01-01')),
	PARTITION PAR2024 VALUES LESS THAN (to_date('2025-01-01')),
	PARTITION PAR2025 VALUES LESS THAN (to_date('2026-01-01')),
	PARTITION PAR2026 VALUES LESS THAN (to_date('2027-01-01')),
	PARTITION PAR2027 VALUES LESS THAN (to_date('2028-01-01')),
	PARTITION PAR2028 VALUES LESS THAN (to_date('2029-01-01')),
	PARTITION PAR2029 VALUES LESS THAN (to_date('2030-01-01')),
	PARTITION PAR2030 VALUES LESS THAN (to_date('2031-01-01')),
	PARTITION MORETHAN2030 VALUES EQU OR LESS THAN (MAXVALUE)
);

CREATE UNIQUE  INDEX "INDEX5546873216673678" ON "LYLP"."YP_USER_TMP"("ID" ASC,"CREATE_TIME" ASC);

4.拷贝数据

将"YP_USER"表中的数据拷贝到"YP_USER_TMP"表中,SQL如下

	INSERT INTO "LYLP"."YP_USER_TMP"(ID,USER_NAME,SEX,AGE,CREATE_TIME,LAST_MODIFY_TIME,IS_DELETE) SELECT ID,USER_NAME,SEX,AGE,CREATE_TIME,LAST_MODIFY_TIME,IS_DELETE FROM "LYLP"."YP_USER";

5.修改表名

第一步:将"YP_USER"表名改为"YP_USER_OLD"(或者删除YP_USER表),SQL如下

ALTER TABLE "LYLP"."YP_USER" RENAME TO YP_USER_OLD;

第二步:将"YP_USER_TMP"表名改为"YP_USER"

ALTER TABLE "LYLP"."YP_USER_TMP" RENAME TO YP_USER;

5.分区验证

SELECT * FROM "LYLP"."YP_USER" PARTITION (LESSTHAN2019);
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值