Linux下如何运行sql脚本

Linux下如何运行sql脚本,第1张

Linux运行sql脚本的具体 *** 作步骤如下:

1、使用shell工具登陆到安装postgresql的服务器,切换到postgres用户,postgresql默认的 *** 作用户,命令是:su - postgres,查看当前路径是/var/lib/psql,创建一个test.sql脚本文件,命令是:vim test.sql。

2、sql脚本内容是:create table test (id int not null primary key,name text)insert into test valus(1, 't1')

3、执行test.sql脚本,命令是:psql -f test.sql

这里是因为postgresql安装本机上,在第一步中我们切换到了postgres用户,因此这里默认就是postgres用户来 *** 作,不用带上用户名和密码。执行结果如下,可以看到有两个提示:

create table

insert 0 1

执行完成后,我们登入数据库,命令是:psql

4、进入psql交互式命令行后,我们执行两个查看命令:\d

可以看到表test确实已经创建成功,然后执行命令:\d test

可以看到表中字段是id和name,和我们创建语句中内容一样,说明第一条语句执行成功。

5、查看表中数据,命令是:select * from test

显示出来的值是1,t1,说明第二条执行语句也执行成功,说明test.sql脚本执行成功。

6、默认是postgres用户,本机 *** 作是,不需要用户和密码,现在我们来试试 *** 作远程linux服务器上的postgresql,也就是说执行本地的脚本文件,在远程服务器上创建表。如下面图中所示,命令是:psql -U test1 -h 192.168.1.194 -f test.sql,输入对应用户的密码。

7、登陆到这个远程服务器上,命令是:psql -U test -h 192.168.194

执行查看命令:\d,\d test

最后查询数据库:select * from test结果和上面都一致。

1、在gedit中编写.sh格式的文件,保存为a.sh。

2、在终端调用脚本,定位到目录,然后输入。

3、编写的if/else如下:if和 之间的代码?ls -l a.sh是用来判断当前的目录下是否存在a.sh这个文件。if和else的基本格式如下所示。

4、在终端调用的结果如下,可以看到输出了。

5、再看一个if/else脚本如下脚本,if/else格式和上面格式一致,重点看下 if 和 ;间的那个命令,命令开始以 [,后面有4个参数 $1,=,me,]。

6、输出的结果如下所示。

主要有以下几种方法:

1、将SQL语句直接嵌入到shell脚本文件中

代码如下:

--演示环境

[root@SZDB ~]# more /etc/issue

CentOS release 5.9 (Final)

Kernel \r on an \m

root@localhost[(none)]>show variables like 'version'

+---------------+------------+

| Variable_name | Value |

+---------------+------------+

| version | 5.6.12-log |

+---------------+------------+

[root@SZDB ~]# more shell_call_sql1.sh

#!/bin/bash

# Define log

TIMESTAMP=`date +%Y%m%d%H%M%S`

LOG=call_sql_${TIMESTAMP}.log

echo "Start execute sql statement at `date`." >>${LOG}

# execute sql stat

mysql -uroot -p123456 -e "

tee /tmp/temp.log

drop database if exists tempdb

create database tempdb

use tempdb

create table if not exists tb_tmp(id smallint,val varchar(20))

insert into tb_tmp values (1,'jack'),(2,'robin'),(3,'mark')

select * from tb_tmp

notee

quit"

echo -e "\n">>${LOG}

echo "below is output result.">>${LOG}

cat /tmp/temp.log>>${LOG}

echo "script executed successful.">>${LOG}

exit

[root@SZDB ~]# ./shell_call_sql1.sh

Logging to file '/tmp/temp.log'

+------+-------+

| id | val |

+------+-------+

|1 | jack |

|2 | robin |

|3 | mark |

+------+-------+

Outfile disabled.

2、命令行调用单独的SQL文件

代码如下:

[root@SZDB ~]# more temp.sql

tee /tmp/temp.log

drop database if exists tempdb

create database tempdb

use tempdb

create table if not exists tb_tmp(id smallint,val varchar(20))

insert into tb_tmp values (1,'jack'),(2,'robin'),(3,'mark')

select * from tb_tmp

notee

[root@SZDB ~]# mysql -uroot -p123456 -e "source /root/temp.sql"

Logging to file '/tmp/temp.log'

+------+-------+

| id | val |

+------+-------+

|1 | jack |

|2 | robin |

|3 | mark |

+------+-------+

Outfile disabled.

3、使用管道符调用SQL文件

代码如下:

[root@SZDB ~]# mysql -uroot -p123456 </root/temp.sql

Logging to file '/tmp/temp.log'

id val

1 jack

2 robin

3 mark

Outfile disabled.

#使用管道符调用SQL文件以及输出日志

[root@SZDB ~]# mysql -uroot -p123456 </root/temp.sql >/tmp/temp.log

[root@SZDB ~]# more /tmp/temp.log

Logging to file '/tmp/temp.log'

id val

1 jack

2 robin

3 mark

Outfile disabled.

4、shell脚本中MySQL提示符下调用SQL

代码如下:

[root@SZDB ~]# more shell_call_sql2.sh

#!/bin/bash

mysql -uroot -p123456 <<EOF

source /root/temp.sql

select current_date()

delete from tempdb.tb_tmp where id=3

select * from tempdb.tb_tmp where id=2

EOF

exit

[root@SZDB ~]# ./shell_call_sql2.sh

Logging to file '/tmp/temp.log'

id val

1 jack

2 robin

3 mark

Outfile disabled.

current_date()

2014-10-14

id val

2 robin

5、shell脚本中变量输入与输出

代码如下:

[root@SZDB ~]# more shell_call_sql3.sh

#!/bin/bash

cmd="select count(*) from tempdb.tb_tmp"

cnt=$(mysql -uroot -p123456 -s -e "${cmd}")

echo "Current count is : ${cnt}"

exit

[root@SZDB ~]# ./shell_call_sql3.sh

Warning: Using a password on the command line interface can be insecure.

Current count is : 3

[root@SZDB ~]# echo "select count(*) from tempdb.tb_tmp"|mysql -uroot -p123456 -s

3

[root@SZDB ~]# more shell_call_sql4.sh

#!/bin/bash

id=1

cmd="select count(*) from tempdb.tb_tmp where id=${id}"

cnt=$(mysql -uroot -p123456 -s -e "${cmd}")

echo "Current count is : ${cnt}"

exit

[root@SZDB ~]# ./shell_call_sql4.sh

Current count is : 1


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8505851.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存