背景:MySQL在使用列表分区时,想申明一个默认分区键的分区表,不能创建成功,具体如下
CREATE TABLE aa (
c1 INT NOT NULL,
c2 VARCHAR(20),
c3 INT NOT NULL,
c4 VARCHAR(20)
)
PARTITION BY LIST(c1) (
PARTITION p_1 VALUES IN (1,2,3),
PARTITION p_default VALUES in (DEFAULT) -- 错误写法
);
想要达到的目的是新增数据c1在非(1,2,3) 的情况下也能将数据存在p_default,官方文档如下
Unlike the case with RANGE partitioning, there is no “catch-all” such as MAXVALUE; all expected values for the partitioning expression should be covered in PARTITION ... VALUES IN (...) clauses. An INSERT statement containing an unmatched partitioning column value fails with an error.
暂时没有发现MySQL能够解决这个问题的方案,如果MySQL没有解决上述情况,LIST Partitioning就没那么好用....
使用过PostgreSQL,感觉pgsql这一块做的就比较好,声明式分区
CREATE TABLE aa (
c1 INT NOT NULL,
c2 VARCHAR(20),
c3 INT NOT NULL,
c4 VARCHAR(20)
) PARTITION BY LIST (c1);
CREATE TABLE p_1 PARTITION OF aa FOR VALUES IN (1,2,3);
CREATE TABLE p_default PARTITION OF aa default;
INSERT INTO aa (c1,c2,c3,c4)
VALUES(1,'2',3,'4'),
(2,'3',4,'5'),
(3,'4',5,'6'),
(4,'5',6,'7');
大家在使用数据库时会遇到什么样的奇怪的问题呢,可以在评论区讨论一下。
最近一段时间或者工作使用什么关系型数据库比较多呢