首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中场的快速迁移

MySQL中场的快速迁移
EN

Database Administration用户
提问于 2015-05-11 22:01:31
回答 1查看 45关注 0票数 0

现在我有以下表项

  • 名称(varchar)
  • 类别(varchar)
  • id

...etc

我想要创建一个类别表和items_categories映射表,这样我就可以开始在它自己的表中跟踪类别。

问题是大项目表需要一段时间。

现在,我确实在items表上选择了不同的类别。这将是缓慢的,真的没有办法绕过它。

将项目中的类别字段迁移到具有类别表和类别项表的最快方法是什么?这必须在所有Sql中完成(没有外部脚本)。

EN

回答 1

Database Administration用户

发布于 2015-05-11 22:16:37

警告:这是未经测试的代码。

代码语言:javascript
复制
CREATE TABLE Categories (
    id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL,
    category VARCHAR(...) NOT NULL,
    PRIMARY KEY(id),
    INDEX(category)
) ENGINE = InnoDB;

-- Create mapping table
CREATE TABLE Categories_Items (
    category_id SMALLINT UNSIGNED NOT NULL,
    item_id ...,
    PRIMARY KEY(category_id, item_id),
    INDEX(item_id, category_id)
) ENGINE = InnoDB;

-- Populate Categories table and generate ids
INSERT INTO Categories (category)
    SELECT DISTINCT category FROM items;

-- Start to convert Items.category to Items.category_id
ALTER TABLE Items
    ADD COLUMN category_id SMALLINT UNSIGNED NOT NULL;

-- Populate mapping table
INSERT INTO Categories_Items
   (category_id, item_id)
    SELECT c.id, i.id
        FROM Categories AS c
        JOIN Items AS i  ON i.category = c.category;

-- Finish conversion
ALTER TABLE Items
    DROP COLUMN category;
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/101226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档