如何删除MYSQL中所有表中的单个列

时间:2014-04-26 14:00:23

标签: mysql

我的数据库的每个表都有一个列'seq',我想轻易删除。

我必须偶尔在MySQL中这样做,我希望这可以自动化。

1 个答案:

答案 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。如果您的表格大小很重要,这将为您节省大量时间。