【问题标题】:How to update all records of all tables in database?如何更新数据库中所有表的所有记录?
【发布时间】:2016-12-31 12:23:10
【问题描述】:

我有一张包含很多记录的表(可能超过 500 000 或 1 000 000)。 我想在整个数据库的所有表中更新一些具有相同字段名称的公共列。

我知道将单独的查询写入单个表的传统方法,但不知道一个查询来更新所有表的所有记录。

在不使用某些特定方言的特性的情况下,在 SQL 中执行此操作的最有效方法是什么,因此它适用于任何地方(Oracle、MSSQL、MySQL、Postgres 等)?

附加信息:没有计算字段。有索引。使用生成的 SQL 语句逐行更新表。

【问题讨论】:

  • 这是一件奇怪的事情。
  • SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{your_db}'; 这是遍历数据库中所有表的方式。我尝试过同样的方法。可能是我错过了什么。

标签: php mysql database performance


【解决方案1】:

(这听起来像是规范化“列”的经典案例。)

无论如何...不。没有单个查询可以在所有表​​中定位该列,然后对每个表执行UPDATE

在 MySQL 中,您可以使用表 information_schema.COLUMNS 来定位包含特定命名列的所有表。使用这样的SELECT,您可以生成(使用CONCAT() 等)所需的UPDATE 语句。但是,您需要手动运行它们(通过复制和粘贴)。

当然,您可能可以编写一个存储过程来将其包装到一个调用中,但这太冒险了。如果其他一些表具有相同的列名,但不应该更新怎么办?

至于跨多个供应商的通用代码——算了吧!几乎每种语法都需要进行一些调整。

【讨论】:

  • 它要求更新所有表,条件是更新所有“激活”状态的表的所有记录并将其更改为“活动”状态。是的,存储过程可以工作。总之谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
相关资源
最近更新 更多