我有一个旧数据库,该数据库的关系基于字符串(人名),而不是id。例如,person
在comments
表上的列person_name
处有许多comments
联接。
我想通过将列person_name
更改为person_id
来解决此问题。
它包括在person_id
上创建新的comments
列并更新值:
UPDATE comments SET
person_id = (SELECT id FROM people WHERE LOWER(person_name) = name);
我不能只丢下person_name
并更新外键。我需要确保所有评论均正确链接到其作者。通过简单地选择所有具有person_name
但具有空person_id
的注释,我可以引发红色标记,因为此迁移将自动应用于许多表。
SELECT 1 FROM comments WHERE person_id IS NULL AND person_name IS NOT NULL
请注意,有些评论是匿名的,因此person_name
可能是NULL
。
要做到这一点,我可以做:
IF EXISTS(SELECT 1 FROM comments WHERE person_id IS NULL AND person_name IS NOT NULL)
THEN
ALTER TABLE comments
DROP COLUMN person_name;
END IF;
不幸的是,这似乎仅适用于MSSQL,不适用于MySQL
我可以使用什么替代方法?