使用MySQL的EXISTS条件的ALTER TABLE

时间:2019-02-08 14:02:56

标签: mysql

上下文

我有一个旧数据库,该数据库的关系基于字符串(人名),而不是id。例如,personcomments表上的列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

我可以使用什么替代方法?

0 个答案:

没有答案