不同的where子句取决于表模式

yrdbyhpb  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(465)

我正在尝试使用“mysqldump”命令行工具为数据库创建一个mysql转储,我希望做一些独特的事情。本质上,如果表包含某一列,则根据这些约束转储,否则,转储整个表。但是由于mysqldump命令行选项的性质,这一切都必须在一个where子句中。
在psuedo代码中,我必须这样做:

  1. if table.columns contains "user_id":
  2. where = "user_id=1" // dump rows where user_id=1
  3. else:
  4. where = "TRUE" // dump whole table

但在mysqldump遇到的所有表中都有一个where子句

uyhoqukh

uyhoqukh1#

这个 --where mysqldump选项可用于将表达式传递给select for each表,但它将相同的表达式传递给所有表。
如果需要对不同的表子集使用不同的where子句,则需要执行多个mysqldump命令,并针对不同的表集执行每个命令
请回复您的意见:
不,对sql查询中列的引用必须在解析查询时修复,这意味着任何列引用都必须引用表中存在的列。如果列确实存在,则无法在sql中生成使用列的表达式;如果列不存在,则无法忽略列引用。
要执行您所描述的操作,您必须查询information\u schema以查看表中存在哪些列,然后根据您在表中找到的列有条件地格式化转储的sql查询。
但在mysqldump,你没有机会这么做。它必须在mysqldump的代码中实现。
请随意获取mysqldump的源代码,并为其添加您自己的逻辑。不过好像要做很多工作。

相关问题