我正在尝试使用“ mysqldump”命令行工具为数据库进行mysql转储,并且正在寻找一种独特的方法。本质上,如果表包含某个列,则根据这些约束进行转储,否则,转储整个表。但是由于mysqldump命令行选项的性质,所有这些都必须放在一个WHERE子句中。
在伪代码中,这是我要做的:
if table.columns contains "user_id":
where = "user_id=1" // dump rows where user_id=1
else:
where = "TRUE" // dump whole table
但是在所有适用于每个表mysqldump的where子句中
答案 0 :(得分:0)
mysqldump的--where
选项可用于将表达式传递给每个表的SELECT,但是它将 same 表达式传递给 all 表。
如果需要对表的不同子集使用不同的WHERE子句,则需要执行多个mysqldump命令,并针对不同的表集执行每个命令
发表评论:
否,在解析查询时必须固定对SQL查询中列的引用,这意味着任何列引用都必须引用表中存在的列。如果在列中存在列,则无法在SQL中创建使用列的表达式;在列不存在时,该表达式将忽略列引用。
要执行所描述的操作,您将必须查询INFORMATION_SCHEMA以查看表中存在哪些列,然后根据发现的表中存在的列,有条件地格式化转储的SQL查询。
但是在mysqldump中,您没有机会这样做。它必须在mysqldump的代码中实现。
可以随时获取mysqldump的源代码,并为其添加自己的逻辑。似乎需要做很多工作。