最近帮老婆处理数据,需要同时对库内多个表进行操作,想着一个一个写sql太麻烦了,于是从网上搜集资料整理了一下,其实还是比较简单的,通过GROUP_CONCAT即可实现,例如我现在有个数据库test
,要对库内所有表生成一个查询语句:
查询语句生成如下:
-- 设置可执行的sql语句最大长度 SET SESSION group_concat_max_len = 1024000; -- 需要添加的字段通过拼接得到可执行的sql语句 SELECT GROUP_CONCAT( 'select ', table_name, '.* from ', table_name, ' ;' SEPARATOR " " ) FROM information_schema.TABLES WHERE table_schema = 'test' AND table_name LIKE '%o%';
生成的查询结果如下:
SELECT bank_account.* FROM bank_account; SELECT person.* FROM person;
执行这两个sql语句就达到我们批量查询的效果了:
同样我们也可以批量执行DDL语句,例如给库内所有表都加一个字段:
-- 设置可执行的sql语句最大长度 SET SESSION group_concat_max_len = 1024000; -- 需要添加的字段通过拼接得到可执行的sql语句 SELECT GROUP_CONCAT( 'alter table ', table_name, ' add column remark TINYTEXT;' SEPARATOR " " ) sql语句 FROM information_schema.TABLES WHERE table_schema = 'test' AND table_name LIKE '%o%';
生成的查询结果如下:
ALTER TABLE bank_account ADD COLUMN remark TINYTEXT; ALTER TABLE person ADD COLUMN remark TINYTEXT;
我们执行这两个sql语句:
执行成功后查看表信息: