首页 > 解决方案 > 如何支持基于 MySQL 中插入的数据创建新列

问题描述

我是新手,MySQL并试图找到一种方法来处理dynamic基于插入数据的列创建。例如,如果我在下表中插入一些数据,与 aa 相关的特定数据将进入dummy_{specific extension} 列,即dummy_aa. 也一样dummy_bb

create table dummy(
   id INT, 
   dummy_aa VARCHAR(100), 
   dummy_bb VARCHAR(100), 
   dummy_age VARCHAR(100), 
   PRIMARY KEY (id)
);

insert into dummy values 
(1, aa, 15),
(2, aa, 17),
(3, bb, 18),
(4, bb, 19);

但是,当我要插入不同名称的新数据时,如下所示,我希望该cc值进入dummy_cc存在的列。

insert into dummy values (5, cc, 20)

什么可能是在 MySQL 中创建动态列而不影响性能的最佳方法,以及在每次插入之前检查列是否存在的最佳方法(我不确定是否存在更好的方法然后检查列是否存在) .

标签: mysql

解决方案


这里的一般答案是dummy_aa,dummy_bb等列可能甚至不应该存在。相反,请使用此架构:

CREATE TABLE dummy (
    id INT,
    dummy_code VARCHAR(100),
    dummy_group INT,
    dummy_age INT,
    PRIMARY KEY (id)
)

也就是说,为虚拟类型/代码保留一列然后您的 4 个样本插入将变为:

INSERT INTO dummy VALUES (1, 1, 'aa', 15);
INSERT INTO dummy VALUES (2, 1, 'aa', 17);
INSERT INTO dummy VALUES (3, 2, 'bb', 18);
INSERT INTO dummy VALUES (4, 2, 'bb', 19);

现在,当您想要查看虚拟类型的单独列时,请执行数据透视查询:

SELECT
    dummy_group,
    MAX(CASE WHEN dummy_code = 'aa' THEN dummy_age END) AS dummy_aa,
    MAX(CASE WHEN dummy_code = 'bb' THEN dummy_age END) AS dummy_bb
FROM dummy
GROUP BY
    dummy_group;

推荐阅读