我的数据库的每个表都有一个列'seq',我想轻易删除。
我必须偶尔在MySQL中这样做,我希望这可以自动化。
答案 0 :(得分:0)
这样做没有一个简单的神奇表达。您需要生成一个SQL语句列表,然后以某种方式运行它们。
(大多数数据库人员不会在生产中经常从数据库中删除列;它需要花费很多时间才能使表无法访问,并且具有破坏性。胖手指错误可能会让你感到困惑。)
您可以首先使用MySQL中的information_schema
来发现哪些表中包含seq
列。此查询将返回您当前使用的数据库的表列表。
SELECT DISTINCT TABLE_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND COLUMN_NAME = 'seq'
然后,您可以调整该查询,例如,创建一个这样的语句列表。
SELECT DISTINCT
CONCAT('UPDATE ',TABLE_NAME, ' SET seq = 0;') AS stmt
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND COLUMN_NAME = 'seq'
这将生成如下结果集:
UPDATE table_a SET seq = 0;
UPDATE table_b SET seq = 0;
UPDATE user SET seq = 0;
然后你可以逐个运行这些语句。这些语句将使您的seq列清零。
修改强>
您也可以
CONCAT('ALTER TABLE ',TABLE_NAME, ' DROP COLUMN seq;') AS stmt
获取每个表的drop column语句。
但是,您可以考虑创建不包含seq
列的表的视图,然后使用这些视图导出到PostgreSQL。如果您的表格大小很重要,这将为您节省大量时间。