Shell是每一个UNIX系统都有的工具,他功能强大,有很多系统启动程序是用Shell来写的.
在这里,我们利用Shell程序来操作MySQL数据库.
约定: MySQL管理用户为root, 密码为secret.
# vi mysql_opt.sh
#!/bin/sh
#
# 调用方法: mysql_opt $db_name "SQL语句"
这样,就能通过调用mysql_opt函数来对MySQL数据库进行操作.
例: 要查找数据库test_db中test_table表的所有数据
如果需要导出mysql的记录到文本文件:
我知道的有如下两种方式可以在shell中访问操作mysql数据库
1. mysql -uusername -ppasswd -e "command;command"
对mysql偶尔有用的另一个选项是-e或--execute选项,可用来将SQL语句传递给服务器。该语句必须
用引号引起来(单引号或双引号)。(然而,如果想要在查询中将值引起来,则对于查询应使用双引号
,查询中引用的值应使用单引号)。当使用该选项时,语句被执行,然后mysql立即退出命令外壳。
例如,你可以用下面的命令获得用户账户列表:
shell> mysql -u root -p -e "SELECT User, Host FROM User" mysql
请注意mysql数据库名作为一个独立的参量传递。然而,相同的查询可能已经使用mysql -u root -p
-e "SELECT User,Host FROM mysql.User"从外壳中执行。
可以按这种方式传递多个SQL语句,用分号隔开:
2. 如果sql语句比较多,可使用如下方式:
从查询结果中可以看出,两者的输出结果格式不一样,前一种方式保留了mysql的输出格式。
另外,与此篇文章有关的shell 重定向知识,可以查阅ABS guide第16章节“I/O重定向”和第17章节“Here Documents”
重定向示意:
自动登录mysql(root:root,passwd:123456),查询test库,test1表里的user=aa的记录.
#!/bin/sh
mysql -uroot -p123456 < use test;
select * from testaa while a=10000; ###1000 not usr single quote mark,because a is int type,only char type need single quote mark.
EOF
在这里,我们利用Shell程序来操作MySQL数据库.
约定: MySQL管理用户为root, 密码为secret.
# vi mysql_opt.sh
#!/bin/sh
#
# 调用方法: mysql_opt $db_name "SQL语句"
sql_user=root
sql_pass=secret
sql_opt="-u$sql_user -p$sql_pass -s"
mysql_opt() {
db_name=$1
sql_lan=$2
mysql $sql_opt << EOF
USE $db_name;
$sql_lan;
QUIT
EOF
}
#
# The file mysql_opt.sh ends here!
sql_pass=secret
sql_opt="-u$sql_user -p$sql_pass -s"
mysql_opt() {
db_name=$1
sql_lan=$2
mysql $sql_opt << EOF
USE $db_name;
$sql_lan;
QUIT
EOF
}
#
# The file mysql_opt.sh ends here!
这样,就能通过调用mysql_opt函数来对MySQL数据库进行操作.
例: 要查找数据库test_db中test_table表的所有数据
# vi select.sh
#!/bin/sh
#
. ./mysql_opt.sh
echo "Query..."
data=`mysql_opt test_db "SELECT * FROM test_table WHERE 1"`
echo $data
echo "Done!"
#
# The file select.sh ends here!
[root@kevin bin]# ./mysql -u root -p111111 -e "use mysql;select host,user,password from user";
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *FD571203974BA9AFE270FE62151AE967ECA5E0AA |
| kevin.com | root | |
| 127.0.0.1 | root | |
| localhost | | |
| kevin.com | | |
+-----------+------+-------------------------------------------+
****************************************
#!/bin/bash
/usr/local/mysql-5.1.32/bin/mysql -u root -p111111 -e "use mysql;select host,user,password from user";
exit 0;
****************************************
#!/bin/sh
#
. ./mysql_opt.sh
echo "Query..."
data=`mysql_opt test_db "SELECT * FROM test_table WHERE 1"`
echo $data
echo "Done!"
#
# The file select.sh ends here!
[root@kevin bin]# ./mysql -u root -p111111 -e "use mysql;select host,user,password from user";
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *FD571203974BA9AFE270FE62151AE967ECA5E0AA |
| kevin.com | root | |
| 127.0.0.1 | root | |
| localhost | | |
| kevin.com | | |
+-----------+------+-------------------------------------------+
****************************************
#!/bin/bash
/usr/local/mysql-5.1.32/bin/mysql -u root -p111111 -e "use mysql;select host,user,password from user";
exit 0;
****************************************
如果需要导出mysql的记录到文本文件:
/usr/local/mysql-5.1.32/bin/mysql -u root -p111111 -e "use mysql;select host,user,password from user into outfile '/home/mysql/aa.txt';"
mysql -u $user -p$password -e "create database test;"
mysql -u $user -p$password -e "create database test;"
我知道的有如下两种方式可以在shell中访问操作mysql数据库
1. mysql -uusername -ppasswd -e "command;command"
[root@localhost ~]# mysql -uroot -p123456 -e "select user,host from mysql.user"
+------+-----------------------+
| user | host |
+------+-----------------------+
| root | % |
| root | 127.0.0.1 |
| php | localhost |
| root | localhost |
| root | localhost.localdomain |
+------+-----------------------+
请看下面这段文字:(引自mysql参考手册)+------+-----------------------+
| user | host |
+------+-----------------------+
| root | % |
| root | 127.0.0.1 |
| php | localhost |
| root | localhost |
| root | localhost.localdomain |
+------+-----------------------+
对mysql偶尔有用的另一个选项是-e或--execute选项,可用来将SQL语句传递给服务器。该语句必须
用引号引起来(单引号或双引号)。(然而,如果想要在查询中将值引起来,则对于查询应使用双引号
,查询中引用的值应使用单引号)。当使用该选项时,语句被执行,然后mysql立即退出命令外壳。
例如,你可以用下面的命令获得用户账户列表:
shell> mysql -u root -p -e "SELECT User, Host FROM User" mysql
请注意mysql数据库名作为一个独立的参量传递。然而,相同的查询可能已经使用mysql -u root -p
-e "SELECT User,Host FROM mysql.User"从外壳中执行。
可以按这种方式传递多个SQL语句,用分号隔开:
shell> mysql -u root -p --execute="SELECT Name FROM Country WHERE Name LIKE
'AU%';SELECT COUNT(*) FROM City" world
'AU%';SELECT COUNT(*) FROM City" world
2. 如果sql语句比较多,可使用如下方式:
[root@localhost ~]# mysql -uroot -p123456 << EOF
> use mysql;
> select user,host from user;
> EOF
user host
root %
root 127.0.0.1
php localhost
root localhost
root localhost.localdomain
> use mysql;
> select user,host from user;
> EOF
user host
root %
root 127.0.0.1
php localhost
root localhost
root localhost.localdomain
从查询结果中可以看出,两者的输出结果格式不一样,前一种方式保留了mysql的输出格式。
另外,与此篇文章有关的shell 重定向知识,可以查阅ABS guide第16章节“I/O重定向”和第17章节“Here Documents”
重定向示意:
mysql -uroot -p123qwe <"/opt/sqlinfo.sql" >"a.txt"
自动登录mysql(root:root,passwd:123456),查询test库,test1表里的user=aa的记录.
#!/bin/sh
mysql -uroot -p123456 <
select * from testaa while a=10000; ###1000 not usr single quote mark,because a is int type,only char type need single quote mark.
EOF
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2303/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2009-12-7 14:12
评论列表