云数据库 GaussDB-分区表DQL/DML
分区表DQL/DML
由于分区的实现完全体现在数据库内核中,用户对分区表的DQL/DML与非分区表相比,在语法上没有任何区别。
出于分区表的易用性考虑, GaussDB 支持指定分区的DQL/DML操作,指定分区可以通过PARTITION (partname)或者PARTITION FOR (partvalue)来进行。对于二级分区,可以通过SUBPARTITION(subpartname)或者SUBPARTITION FOR (subpartvalue)指定具体的二级分区。指定分区执行DQL/DML时,若插入的数据不属于目标分区,则业务报错;若查询的数据不属于目标分区,则跳过该数据的处理。
指定分区DQL/DML支持以下几类语法:
- 查询(SELECT)
- 插入(INSERT)
- 更新(UPDATE)
- 删除(DELETE)
- 插入或更新(UPSERT)
- 合并(MERGE INTO)
指定分区做DQL/DML的示例如下:
--创建分区表list_02。gaussdb=# CREATE TABLE IF NOT EXISTS list_02( id INT, role VARCHAR(100), data VARCHAR(100))PARTITION BY LIST (id)( PARTITION p_list_2 VALUES(0,1,2,3,4,5,6,7,8,9), PARTITION p_list_3 VALUES(10,11,12,13,14,15,16,17,18,19), PARTITION p_list_4 VALUES( DEFAULT ), PARTITION p_list_5 VALUES(20,21,22,23,24,25,26,27,28,29), PARTITION p_list_6 VALUES(30,31,32,33,34,35,36,37,38,39), PARTITION p_list_7 VALUES(40,41,42,43,44,45,46,47,48,49)) ENABLE ROW MOVEMENT;--导入数据。INSERT INTO list_02 VALUES(null, 'alice', 'alice data');INSERT INTO list_02 VALUES(2, null, 'bob data');INSERT INTO list_02 VALUES(null, null, 'peter data');--对指定分区进行查询。-- 查询分区表全部数据。gaussdb=# SELECT * FROM list_02 ORDER BY data; id | role | data ----+-------+------------ | alice | alice data 2 | | bob data | | peter data(3 rows)--查询分区p_list_2数据。gaussdb=# SELECT * FROM list_02 PARTITION (p_list_2) ORDER BY data; id | role | data ----+------+---------- 2 | | bob data(1 row)--查询(100)所对应的分区的数据,即分区p_list_4。gaussdb=# SELECT * FROM list_02 PARTITION FOR (100) ORDER BY data; id | role | data----+-------+------------ | alice | alice data | | peter data(2 rows)--对指定分区做IUD。-- 删除分区p_list_5中的全部数据。gaussdb=# DELETE FROM list_02 PARTITION (p_list_5);--指定分区p_list_7插入数据,由于数据不符合该分区约束,插入报错。gaussdb=# INSERT INTO list_02 PARTITION (p_list_7) VALUES(null, 'cherry', 'cherry data');ERROR: inserted partition key does not map to the table partition--将分区值100所属分区,即分区p_list_4的数据进行更新。gaussdb=# UPDATE list_02 PARTITION FOR (100) SET data = '';--UPSERT。gaussdb=# INSERT INTO list_02 (id, role, data) VALUES (1, 'test', 'testdata') ON DUPLICATE KEY UPDATErole = VALUES(role), data = VALUES(data);--MERGE INTO。gaussdb=# CREATE TABLE IF NOT EXISTS list_tmp( id INT, role VARCHAR(100), data VARCHAR(100))PARTITION BY LIST (id)( PARTITION p_list_2 VALUES(0,1,2,3,4,5,6,7,8,9), PARTITION p_list_3 VALUES(10,11,12,13,14,15,16,17,18,19), PARTITION p_list_4 VALUES( DEFAULT ), PARTITION p_list_5 VALUES(20,21,22,23,24,25,26,27,28,29), PARTITION p_list_6 VALUES(30,31,32,33,34,35,36,37,38,39), PARTITION p_list_7 VALUES(40,41,42,43,44,45,46,47,48,49)) ENABLE ROW MOVEMENT;gaussdb=# MERGE INTO list_tmp targetUSING list_02 sourceON (target.id = source.id)WHEN MATCHED THEN UPDATE SET target.data = source.data, target.role = source.roleWHEN NOT MATCHED THEN INSERT (id, role, data) VALUES (source.id, source.role, source.data);--删除表。gaussdb=# DROP TABLE list_02;DROP TABLE list_tmp;
- GaussDB内核_GaussDB数据库内核_高斯数据库内核_华为云
- TaurusDB并行查询_TaurusDB内核_TaurusDB并行执行_PQ
- GaussDB视频教程_gaussdb查看表结构语句_高斯数据库视频教程_华为云
- GaussDB数据库案例_GaussDB数据库的优势_华为高斯数据库_新建高斯数据库
- 云数据库免费_mysql数据库是免费的吗_有哪些数据库
- GaussDB数据库SQL语法_SQL语法_CREATE_ALTER
- GaussDB如何建主键_数据库索引设计规范_高斯数据库如何建主键-华为云
- 云数据库Gaussdb数据库索引_华为gaussdb__gaussdb 数据库
- GaussDB学习_gaussdb教程_高斯数据库学习_华为云
- GaussDB数据库考试_GaussDB认证_高斯数据库考试_华为云