首页 > 解决方案 > 在MYSQL中设置一个主键值等于另一个

问题描述

我在 MYSQL 中有一个包含两列的表:

结果表可能如下所示:

数据库中还有许多引用 Company_Id 的其他表。

如果用户编辑第 2 行的公司名称并将“公司 B”更改为“公司 A”,我想折叠表中的两行。

换言之,行“2, Company B, LLC”将折叠成“1, Company A, LLC”,所有对 Company_Id=2 的引用将改为引用 Company_Id=1。

有没有办法做到这一点?

标签: mysql

解决方案


CREATE PROCEDURE update_company (company_id INT, new_name TEXT)
BEGIN
DECLARE duplicate INT DEFAULT FALSE;
DECLARE CONTINUE HANDLER FOR 1062
  SET duplicate = TRUE;
UPDATE company_table   -- try to update 
  SET company_table.company_name = new_name
  WHERE company_table.company_id = company_id;
IF duplicate THEN      -- if duplicated name detected
    BEGIN
        UPDATE relative_table      -- update relative rows, join rows to existent row
          CROSS JOIN company_table
          SET relative_table.company_id = company_table.company_id
          WHERE relative_table.company_id = company_id 
            AND company_table.company_name = new_name;
        DELETE         -- remove the row to be edited
          FROM company_table
          WHERE company_table.company_id = company_id;
    END;
END IF;
END

演示


推荐阅读