shell脚本操作MYSQL

1.创建脚本test.sh

!/bin/bash  

HOSTNAME="192.168.111.84"                                           #数据库信息
PORT="3306"
USERNAME="root"
PASSWORD="111"

DBNAME="test_db_test"                                                       #数据库名称
TABLENAME="test_table_test"                                            #数据库中表的名称

#也可以写 HOSTNAME="localhost",端口号 PORT可以不设定

 #创建数据库,下面是第一种方式,直接链接数据库并且执行sql
create_db_sql="create database IF NOT EXISTS ${DBNAME}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${create_db_sql}"

#第二种,不执行sql,而是连接数据库,使用<<EOF将后面的语句作为输入执行,
#Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返#回到主调Shell。可以把EOF替换成其他东西,意思是把内容当作标准输入传给程序
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD}<<EOF
use ${DBNAME}

#下面是sql,注意!可以写多条SQL,但每条sql之间使用;分割
select * from test_table_test;
select now();
create temporary table temp (select * from test_table_test);
EOF

2.给脚本赋予执行权限,将上述文件保存成sh文件,然后赋予权限chmod +x,即可执行。

chmod +x test.sh

3.执行sh

./test.sh

MYSQL在shell脚本中使用命令行的一些注意点

1.使用上述第二种方式操作MySQL时,书写SQL语句时,变量的赋值问题

!/bin/bash  

HOSTNAME="192.168.111.84"                                           #数据库信息
PORT="3306"
USERNAME="root"
PASSWORD="111"

DBNAME="test_db_test"                                                       #数据库名称
TABLENAME="test_table_test"                                            #数据库中表的名称

CONDITION='a = 1 and b = 2'
COLUMNVALUE='21314'

mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD}<<EOF
use ${DBNAME}

#r如果是条件,可直接拼接在sql后
select * from test_table_test where ${CONDITION};

#如果是字段值.需要引号
select * from test_table where a = '${COLUMNVALUE}'
EOF

2.shell脚本中,如果sql语句中某些表的字段名与MySQL关键字一样,则需要转意

!/bin/bash  

HOSTNAME="192.168.111.84"                                           #数据库信息
PORT="3306"
USERNAME="root"
PASSWORD="111"

DBNAME="test_db_test"                                                       #数据库名称
TABLENAME="test_table_test"                                            #数据库中表的名称

mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD}<<EOF
use ${DBNAME}

#r如果test_table表中有一个字段名叫system,则查询时需要使用\转意
select \`system\` from test_table_test;

EOF

3.使用临时表时需要注意,在一个查询中只能使用一次临时表,创建临时表后,原表会被屏蔽,只有删除了临时表后才能查询到原表

tips:关于临时表的使用

show tables 语句不会列举临时表;

临时表只在当前连接可见,当这个连接关闭的时候,会自动drop。这就意味着你可以在两个不同的连接里使用相同的临时表名,并且相互不会冲突,或者使用 已经存在的表,但不是临时表的表名。(当这个临时表存在的时候,存在的表被隐藏了,如果临时表被drop,存在的表就可见了)

临时表只能用在 memory,myisam,merge,或者innodb 

!/bin/bash  

HOSTNAME="192.168.111.84"                                           #数据库信息
PORT="3306"
USERNAME="root"
PASSWORD="111"

DBNAME="test_db_test"                                                       #数据库名称
TABLENAME="test_table_test"                                            #数据库中表的名称

mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD}<<EOF
use ${DBNAME}

create temporary table tmp_table(name varchar(10) not null,passwd char(6) not null); 

#下面语句执行会报错,can not reopen table
select * from tmp_table where exists (select count(*) from tmp_table)

EOF 



  • 4
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值