mysql - 从所有表中删除行

标签 mysql sql

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

我可以删除所有表中的行,where column1="abc",而不指定每个表吗?

所以我需要这样的东西:

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

最佳答案

最简单的方法可能如下:

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 命令并全部执行。


注意: 换句话说,您可以编写一个存储程序,您可以在其中通过准备语句将这些生成的命令字符串转换为可执行的命令/查询。

但您可以更喜欢我在上面建议的最简单的方法来绕过复杂性。

关于mysql - 从所有表中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36430545/

相关文章:

sql - 如何将空字符串设为空值以允许在可选字段中重复空字符串?

php - PDO:setAttribute() 对 dblib 和 SQL Server 没有影响

插入触发器之前的 mysql 错误代码 1364 : Field does not have a default value and Error Code 1442. 无法更新存储函数/触发器中的表

php - 使用 joomla 外部 PHP 登录

sql - 我可以在 Oracle 中传递 varchar2 的数字吗?

sql - 如何从 INSERT 返回被插入行以外的值

mysql - 选择不同的 ID

mysql - 在查询中使用 IGNORE 时,MySQL 是否仍然会出现死锁错误?

sql - 显示 GROUP BY 中的所有值

sql - SQLite:由两列索引的列的平均值