MySQL concat用法举例
concat配合information_schema的应用
1 concat的一般用法主要是用于拼接
示例:
执行语句 SELECT CONCAT('M','y','S','Q','L') 可以达到如下效果
2 在写SQL备份语句时,假定要导出三张表分别为world下的
之前我们写备份语句要写三条 分别要导出这三张表;语句分别为
mysqldump -uroot -p123 world city >/tmp/world_city.sql mysqldump -uroot -p123 world country >/tmp/world_country.sql mysqldump -uroot -p123 world countrylanguage >/tmp/world_countrylanguage.sql
但是这是特定语句,如果该库下有3000张表呢,30000张呢;为此这种导出方式不是最好的方式;为此我们可以将concat与information_schema联系起来
SELECT CONCAT('mysqldump -uroot -p123 ',table_schema,' ',table_name,' >/tmp/',table_schema,'_',table_name,'.sql') FROM information_schema.tables WHERE table_schema='world';
请注意期中的一些细节:
' ' 引号中间有空格的话是表示空格,table_schema表示数据库名
table_name表示表名;这些属性在information_schema都可以找到
这是初始的写法;执行效果如下
最后处理的方式:语句写出来了,达到我们要的效果了;如果将来这个库当中有其他表就会新增到concat的输出语句
以上还不是最佳的效果
我们最好是将输出的语句导出到指定文件
第一次执行会报错;
处理方式如下:在/etc/my.cnf下新增语句 指定安全路径
secure-file-priv=/tmp 并重启数据库后生效/etc/init.d/mysqld restart
重新执行语句不再报错
在终端查看效果如下:
该脚本可以直接用sh 执行 执行完就会备份这4个表了
新的示例1:创建world下所有表的备份表
USE world -- 给world数据下每个表创建备份表 SHOW TABLES; -- 原先写法 CREATE TABLE nod_bak LIKE nod; USE world SHOW TABLES; DROP TABLE nod_bak -- 使用concat SELECT CONCAT('create table ',table_name,'_bak like ',table_name,';') FROM information_schema.tables WHERE table_schema='world' INTO OUTFILE '/tmp/world_bak.sql'
新的示例2 :删除world下所有的bak后缀的表
SELECT CONCAT('drop table ',table_name,'_bak',';') FROM information_schema.`TABLES` WHERE table_schema='world' INTO OUTFILE '/tmp/del_bak.sql';
关于oracle 和concat有关的内容
https://www.cnblogs.com/nodchen/p/10036189.html