Shell脚本执行SQL

12 篇文章 0 订阅

通过Shell脚本来执行一些sql命令或sql文件,对我们的日常快速运维是很方便的;下面记录一下简单的用法:
1.删除相关数据
简单shell脚本如下

#!/bin/bash

read -p "Enter your username, please: " username

read -p "Enter your password, please: " pswd

User=$username
Password=$pswd
Host=localhost

function exec_sql {
    echo 'Start to execute SQL Script ...'
  
	#execute SQL Script
	qry_result_num="$1"

	if [ "$?" -ne "0" ]
	then
		echo "Occur error when execute SQL script ..."
		exit
	fi

	echo 'Done Successfully.'
}


echo "*********************************************************************"
echo "Job1数据清洗 ------------------------------------------------------1"
echo "Job2数据清洗 ------------------------------------------------------2"
echo "Job3数据清洗 ------------------------------------------------------3"
echo "Job4数据清洗 ------------------------------------------------------4"
echo "Job5数据清洗 ------------------------------------------------------5"
echo "*********************************************************************"
	
read -p "Select the SQL script you want to execute: [1/2/3/4/5] " input

case $input in
        1)
                exec_sql `mysql -h $Host -u$User -p$Password -s -e "source job1.sql"`
                ;;
        2)
                exec_sql `mysql -h $Host -u$User -p$Password -s -e "source job2.sql"`
                ;;
		3)
                exec_sql `mysql -h $Host -u$User -p$Password -s -e "source job3.sql"`
                ;;
		4)
                exec_sql `mysql -h $Host -u$User -p$Password -s -e "source job4.sql"`
                ;;
		5)
                exec_sql `mysql -h $Host -u$User -p$Password -s -e "source job5.sql"`
                ;;
        *)
                echo "Just enter 1 or 2 or 3 or 4 or 5, please."
                exit
                ;;
esac

脚本说明:
User=数据库用户名
Password=用户密码
Host=数据库所在主机名(localhost)
sql脚本文件(job1.sql/job2.sql/job3.sql/job4.sql/job5.sql)放在了和Shell相同的目录(目录以自己喜好放置即可),sql脚本文件内容是写好的正确的sql脚本(删除操作是危险操作,脚本请务必本地测试通过),如job1.sql的内容:

– 指定操作的数据库名
use foo_db;
– 一系列的delete动作
DELETE FROM table1 WHERE …;
DELETE FROM table2 WHERE …;

–当且仅当所有语句正确执行后提交事务
COMMIT;

测试如下:

[root@JD sql_shell]# ./demo.sh
Enter your username, please: root
Enter your password, please: 123456
echo “*********************************************************************”
echo “Job1数据清洗 ------------------------------------------------------1”
echo “Job2数据清洗 ------------------------------------------------------2”
echo “Job3数据清洗 ------------------------------------------------------3”
echo “Job4数据清洗 ------------------------------------------------------4”
echo “Job5数据清洗 ------------------------------------------------------5”
echo “*********************************************************************”
Select the SQL script you want to execute: [1/2/3/4/5] 1
mysql: [Warning] Using a password on the command line interface can be insecure.
Start to execute SQL Script …
Done Successfully.
[root@JD sql_shell]#

2.查询数据
当然也可以不通过sql文件,直接在Shell脚本中写简单的sql语句,如

#!/bin/bash

Host=localhost
User=root
Password=123456

echo 'Execute SQL Script ...'

result_desc=""

qry_result_num=`mysql -h$Host -u$User -p$Password << EOF
use foo_db;
select count(*) as result  from table where 1=1;
EOF`

if $qry_result_num == 0
then
	result_desc="No data in result"
else
	result_desc="Finds "$qry_result_num" records"
fi

echo $result_desc

echo 'Done Successfully.'

也可以

#execute SQL Script
qry_result_num=`mysql -h$Host -u$User -p$Password -s -e "use foo_db; select count(1) from table where 1=1;"`

也可以将查询结果放到指定目录下的文件中,方便统计

#!/bin/bash

Host=localhost
User=root
Password=123456

echo 'Execute SQL Script ...'

`mysql -h $Host -u$User -p$Password -s -e "use foo_db; select * from table where 1=1 into outfile '/home/mysql/data/mysqldata2/tmpdir/demoResult.txt';"`

echo 'Done Successfully.'

将查询结果写入到指定文件,MySQL可能会报没有权限等安全问题,具体解决方法可参考https://blog.csdn.net/k_young1997/article/details/84104475
注:需确保运行的机器已安装MySQL

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: shell脚本可以通过调用mysql命令来执行SQL语句。例如,可以使用以下命令执行SQL语句mysql -h主机名 -u用户名 -p密码 数据库名 -e "SQL语句" 其中,主机名是数据库所在的主机名,用户名和密码是数据库的登录凭据,数据库名是要执行SQL语句数据库名称,SQL语句是要执行SQL语句。 例如,以下是一个简单的shell脚本,用于执行SQL语句并将结果输出到文件中: #!/bin/bash mysql -hlocalhost -uroot -p123456 testdb -e "SELECT * FROM users" > output.txt 该脚本将连接到名为testdb的数据库,并执行SELECT * FROM users语句,将结果输出到output.txt文件中。 ### 回答2: Shell脚本是一种用于Unix和Linux系统的脚本语言,可以用于管理文件系统、执行命令等。在Shell脚本中,我们可以使用各种命令和工具来完成一些常见的任务,其中SQL是一个常见的用途之一。 执行SQL语句需要一个数据库管理系统(DBMS),比如MySQL和Oracle等。一般来说,我们需要首先在Shell脚本中安装适合的DBMS并建立连接。连接数据库后,我们可以使用Shell脚本执行SQL语句并获取返回值。 我们可以使用以下命令在Shell脚本执行SQL: 1. mysql命令 这是一个常见的用于管理MySQL数据库的命令,可以直接在Shell执行SQL语句。我们可以使用以下命令来运行我们的SQL语句mysql -u user -p password -h hostname -P port -D dbname -e "SQL statement" 其中,-u指定用户名,-p指定密码,-h指定主机名,-P指定端口号,-D指定数据库名,-e指定要执行SQL语句。 2. psql命令 这是一个用于管理PostgreSQL数据库的命令,也可以在Shell执行SQL。类似于mysql命令,我们可以使用以下命令来运行我们的SQL语句: psql -h hostname -p port -U username -d dbname -c "SQL statement" 其中,-h指定主机名,-p指定端口号,-U指定用户名,-d指定数据库名,-c指定要执行SQL语句。 有些时候,我们需要在Shell脚本执行多条SQL语句或者使用循环来动态执行SQL,这就需要对Shell脚本的编程能力有一定的要求了。但无论在哪种情况下,我们都需要了解DBMS和Shell脚本的基本语法才能编写出安全高效的代码。 ### 回答3: Shell脚本是一种在Unix或Linux操作系统中使用的编程语言,其脚本文件使用Shell解释器来执行执行SQL语句通常是在数据库中操作数据,与shell脚本紧密相关,尤其是在自动化任务方面。 在Shell脚本执行SQL语句的过程: 1. 指定数据库连接信息:需要在Shell脚本中指定数据库连接信息,包括数据库服务器IP地址、数据库端口、登录名和密码等。可以将这些信息定义为变量,然后在脚本中使用这些变量,方便修改和维护。 2. 编写SQL语句:在Shell脚本中编写需要在数据库执行SQL语句。这些SQL语句可以是查询、插入、更新或删除等操作。注意在写SQL语句时候要通过变量的方式传值,防止SQL注入。 3. 执行SQL语句:通过shell执行数据库客户端程序例如 mysql,postgresql,oracle等,同时传递执行SQL语句。 4. 处理结果:执行SQL语句后,可以获取数据库执行结果,包括数据库操作受影响的行数、查询结果等。可以通过Shell脚本来处理这些结果,比如进行统计、分析、输出等操作。 在实际应用中,Shell脚本执行SQL通常被用于批量处理数据、自动化任务或数据备份等场景,如某个时期对数据进行统计,定时清洗过期数据或导出数据报表。通过Shell脚本执行SQL语句可以极大提高效率,降低手动操作过程中出错可能,保证数据一致性和可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值