从所有表中删除行

6

我有一个包含100多个表的数据库,其中约有20个表拥有一个特定的列,例如 column1

我能否在不指定每个表的情况下,删除所有表中column1="abc"的行?

因此,我需要类似于以下内容的东西:

DELETE FROM [all tables] WHERE column1 = 'abc';

你需要创建一个动态查询,使用 information_schema 来获取具有 column1 的表。 - Juan Carlos Oropeza
只需在信息模式中查询,获取相关行的表名,并构建查询即可。除非您需要多次运行此查询,否则无需费力。 - Gordon Linoff
2个回答

9
最简单的方法可能是以下步骤:
SELECT 
CONCAT('DELETE FROM ',TABLE_NAME," WHERE column1 = 'abc';") comd
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME'
AND COLUMN_NAME ='column1';

这个查询将会给你以下的输出:

DELETE FROM TABLE_1 WHERE column1 = 'abc';
DELETE FROM TABLE_2 WHERE column1 = 'abc';
DELETE FROM TABLE_3 WHERE column1 = 'abc';
DELETE FROM TABLE_4 WHERE column1 = 'abc';
.
.
.

现在复制这些DELETE命令并全部执行。
注意: 另外一种方法是编写存储程序,在其中可以通过prepare语句将这些生成的命令字符串转换为可执行的命令/查询。
但为了避免复杂性,您可以选择我上面建议的最简单的方法。

不会出现错误。如果特定的条目不存在,则没有什么可删除的。它只会静默运行。 - 1000111

0
创建一个游标以迭代变量。 1. 您可以选择表列表 SHOW tables ----> 到变量 2. 创建一个游标 http://www.mysqltutorial.org/mysql-cursor/ 3. 运行带有所需代码的游标!
此致敬礼!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接