Chinaunix首页 | 论坛 | 博客
  • 博客访问: 424900
  • 博文数量: 137
  • 博客积分: 5190
  • 博客等级: 大校
  • 技术积分: 997
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-21 16:19
文章存档

2011年(17)

2010年(120)

我的朋友

分类: Mysql/postgreSQL

2010-03-24 09:12:43

样例库 test
用户名 root
目的 将mysql test库中所有不是innodb引擎的表修改成innodb引擎
解答:
mysql -u root --column-names=false -s -e "show table status from test where \`Engine\` <> 'InnoDB'"|awk '{print "mysql -u root test \"alter table "$1" engine=innodb;\"";}'|bash
 
注意:为了避免列名的问题,官方建议用`符号(数字1左边的键)引用列名。
 
分析:
1.|取得所有引擎不为innodb的表
mysql -u root --column-names=false -s -e "show table status from test where Engine <> 'InnoDB'"
注意点:大小写,使用--column-names=false -s参数,避免显示表头和表格线。
 
2.使用awk取出第一列表名,并拼接
注意点双引号的转义字符\"
 
3.放入shell执行。
 
第二种方法:
mysql -u root -e "show table status from test where Engine <> 'InnoDB'\G"|grep Name|awk '{print "mysql -u root test \"alter table "$2" engine=innodb;\"";}'|bash
使用\G参数来回避column-names=false -s参数。
 
阅读(1357) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~