我有一个包含大量记录的表(可能超过 500 000 或 1 000 000 条)。 我想更新整个数据库中所有表中具有相同字段名称的一些常见列。
我知道向各个表编写单独查询的传统方法,但不知道用一个查询来更新所有表的所有记录。
在 SQL 中执行此操作最有效的方法是什么,而不使用某些方言特定的功能,因此它可以在任何地方(Oracle、MSSQL、MySQL、Postgres 等)工作?
其他信息:没有计算字段。有索引。使用生成的 SQL 语句逐行更新表。
最佳答案
(这听起来像是标准化“列”的经典案例。)
无论如何...不。没有单个查询可以在所有表中找到该列,然后对每个表执行UPDATE
。
在 MySQL 中,您可以使用表 information_schema.COLUMNS
来查找包含特定命名列的所有表。通过这样的SELECT
,您可以生成(使用CONCAT()
等)所需的UPDATE
语句。但是,您需要手动运行它们(通过复制和粘贴)。
当然,您可以编写一个存储过程将其包装到单个调用中,但这风险太大。如果其他表具有相同的列名但不应更新怎么办?
- 构建
ALTER
来更改表引擎的示例:http://mysql.rjweb.org/doc.php/myisam2innodb#generating_alters - 使用 SP 将行“旋转”到列的示例,并执行生成的代码:http://mysql.rjweb.org/doc.php/pivot
至于跨多个供应商的通用代码——算了吧!实际上每种语法都需要进行一定程度的调整。
关于php - 如何更新数据库中所有表的所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39122075/