Mysql 如何对从信息_SCHEMA.TABLES中捕获表名的查询结果运行SQL更新?
我希望在CMS多站点数据库中跨一组公共表替换字符串。以下是收集目标表的初始查询:Mysql 如何对从信息_SCHEMA.TABLES中捕获表名的查询结果运行SQL更新?,mysql,sql,Mysql,Sql,我希望在CMS多站点数据库中跨一组公共表替换字符串。以下是收集目标表的初始查询: SELECT TABLE_NAME as target_table FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%_content' …根据结果,我想运行以下程序: UPDATE target_table SET title = replace(title, 'SEARCH_STRING', 'REPLACE_STRING') WHERE title
SELECT TABLE_NAME as target_table
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%_content'
…根据结果,我想运行以下程序:
UPDATE target_table
SET title = replace(title, 'SEARCH_STRING', 'REPLACE_STRING')
WHERE title LIKE ('%SEARCH_STRING%');
提前感谢您的帮助 对于一次性,一种可行的方法是使用SQL生成一组SQL语句 假设table_schem和table_name不包含反勾号字符,并且如果您的SEARCH_字符串和REPLACE_字符串不包含单引号(或正确转义),我们可以执行以下操作:
SELECT CONCAT('UPDATE `',t.table_schema,'`.`',t.table_name,'` c'
,' SET c.title = REPLACE(c.title, ''SEARCH_STRING'', ''REPLACE_STRING'')'
,' WHERE c.title LIKE (''%SEARCH_STRING%'') ;') AS `-- stmt`
FROM INFORMATION_SCHEMA.TABLES t
WHERE t.table_name LIKE '%_content'
AND t.table_schema NOT IN ('information_schema','mysql','performance_schema')
ORDER BY t.table_schema, t.table_name
我们可以将查询结果保存到文件中。然后将文件中的SQL语句提交到MySQL服务器
(我想我应该使用INFORMATION_SCHEMA.COLUMNS,表中包含名为'title'的列以及与模式匹配的表名,但方法是相同的
请注意,这不能在单个SQL语句中完成;获取表列表的查询必须是一个单独的语句,与实际UPDATE语句的执行分开 编辑我只是看了一下问题中与之相关的答案;这完全不相关。没有任何东西适用于我们试图解决的问题
由于SQL的处理方式(解析、语法检查、语义检查、确定执行计划,然后执行)…标识符(例如表名)必须在SQL文本中作为标记提供。标识符不能在执行时作为值提供。这就是为什么我们需要单独的语句。您需要在存储过程中使用
PREPARE
和EXECUTE
来生成动态SQL。我不明白其他问题是如何相关的。您不能使用JOIN
来指定表名称,仅用于连接数据。SQL语言禁止您在单个语句中进行连接。您可以用任何语言(包括SQL)汇编“动态SQL语句”,任何您认为合适的方式。但这些将是单独的SQL语句。正如一些人正确指出的,我对另一个stackoverlow解决方案的引用不正确。为了清晰起见,该引用已被删除。谢谢大家!