mysql - 在MYSQL中设置一个主键值等于另一个
问题描述
我在 MYSQL 中有一个包含两列的表:
- Company_Id(主键 auto_increment)
- Company_Name(唯一键,varchar)
结果表可能如下所示:
- 1,A公司,LLC
- 2、B公司,LLC
数据库中还有许多引用 Company_Id 的其他表。
如果用户编辑第 2 行的公司名称并将“公司 B”更改为“公司 A”,我想折叠表中的两行。
换言之,行“2, Company B, LLC”将折叠成“1, Company A, LLC”,所有对 Company_Id=2 的引用将改为引用 Company_Id=1。
有没有办法做到这一点?
解决方案
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
推荐阅读
- p5.js - 如何使用 P5js 中触摸对象的 X 和 Y 值?
- sql - 最大行大小超过允许的最大值 8060 字节,我无法将列从 char 转换为 nvarchar
- c# - 更改不可变字段 _id 错误 Mongo DB .net
- java - 如何在java中将拉丁字母转换为英文对应?
- c# - 控制台应用程序中的 .NET Core 日志记录 - 详细信息级别
- javascript - JS 图像刮刀
- amazon-web-services - 什么决定了 AWS Athena 查询“失败”状态中的“瞬时错误”?
- python - 如何在python中将列表下载为fasta格式?
- github - github禁止TortoiseSVN Commit
- java - 多个文件上传不适用于 Okhttp3 中的视频文件