【问题标题】:how can i move column data to another table and set its id to foreign key column in first table? [closed]如何将列数据移动到另一个表并将其 id 设置为第一个表中的外键列? [关闭]
【发布时间】:2021-09-13 07:17:41
【问题描述】:

我有一个表应用程序,其中一个列名为 allowed_command , 然后我创建另一个表 application_command 并想要分离 allowed_command 列并移动到第二个表'application_command' 此外,应用程序表具有来自 application_command 的外键 所以,我需要将 allowed_command 的值复制到 application_command 表,然后将其 id 放到第一个表中

【问题讨论】:

    标签: mysql sql foreign-keys


    【解决方案1】:

    单独创建新表没有意义。我建议您在数据复制期间删除它并创建新实例。

    步骤 1. 创建新表并将数据复制到其中。

    CREATE TABLE application_command ( 
        application_command_id BIGINT AUTO_INCREMENT PRIMARY KEY,
        allowed_command VARCHAR(255) )
    SELECT DISTINCT allowed_command
    FROM application;
    

    第 2 步。为外键创建列。

    ALTER TABLE application 
        ADD COLUMN application_command_id BIGINT,
        ADD FOREIGN KEY fk_allowed_command (application_command_id)
            REFERENCES application_command (application_command_id)
            ON UPDATE CASCADE ON DELETE SET NULL;
    

    步骤 3. 设置关系值。

    UPDATE application
      JOIN application_command USING (allowed_command)
    SET application.application_command_id = application_command.application_command_id;
    

    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=60661aae250012bcc4c9f72c1f6e2cb0

    现在您可以删除application.allowed_command 列。

    【讨论】:

    • 如果列数据不同,则可能是这样,在这种情况下,某些记录具有相同的数据
    • @haniehMoafi 你的问题太笼统了。所以答案也很笼统,它描述了一种可能的解决方法,而且只是近似的。如果您需要更详细的描述,那么您必须提供更多详细信息 - 结构、数据示例、所需的最终状态......以及作为单独问题的最佳方式。
    【解决方案2】:

    要移动列数据,您可以使用INSERT INTO SELECT

    INSERT INTO application_command(allowed_command) ---suppose this is the name of the second table
    SELECT 
       allowed_command 
    FROM 
       application   ---If you have a where condition you can add, if not remove the where condition
    WHERE    
       condition;
    

    id 也可以做到这一点。

    INSERT INTO application (id_application_command) 
    SELECT 
       id
    FROM 
       application_command ---If you have a where condition you can add, if not remove the where condition
    WHERE    
       condition;
    

    【讨论】:

    • 谢谢,但我想对所有记录执行此操作,如工作
    • @haniehMoafi 删除 where 条件
    猜你喜欢
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多