使用MySQL更新所有表中的外键

时间:2014-12-12 06:23:26

标签: mysql

我有35张表country_id

我想做以下(伪代码)

UPDATE {all tables containing country_id} 
SET country_id = 1 
WHERE country_id = 2

有人可以帮忙构建这个sql吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

也许我的代码可以帮助您找到解决方案。

我遇到了类似的问题。我的数据库有76个外键到usersid,我需要增加10的所有ID。最简单的方法是将外键ON UPDATE状态设置为CASCADE。但是当我创建所有FK时我犯了错误,所以所有这些都被设置为NO ACTION。

幸运的是我找到了解决方案。此代码生成SQL查询以将所有FK更新为我的数据库中userid的所有FK:

SELECT
    CONCAT("
        ALTER TABLE `",TABLE_NAME,"`
        DROP FOREIGN KEY `",CONSTRAINT_NAME,"`;
        ALTER TABLE `",TABLE_NAME,"`
        ADD CONSTRAINT `",CONSTRAINT_NAME,"` FOREIGN KEY (`",COLUMN_NAME,"`)
        REFERENCES `users` (`id`)
        ON DELETE NO ACTION
        ON UPDATE CASCADE;
    ")
FROM
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
    REFERENCED_TABLE_NAME = 'users' AND REFERENCED_COLUMN_NAME = 'id';