如何在linux中执行sql文件

如何在linux中执行sql文件,第1张

如何在linux中执行sql文件

第一种方法:

在命令行下(未连接数据库),输入 mysql -h localhost -u root -p123456 <F:\hello world\niuzi.sql (注意路径不用加引号的!!) 回车即可.

第二种方法:

在命令行下(已连接数据库,此时的提示符为 mysql>),输入 source F:\hello world\niuzi.sql (注意路径不用加引号的)

或者 \. F:\hello world\niuzi.sql (注意路径不用加引号的) 回车即可.

以下举个例子,在shell下执行sql命令然后马上回到shell.

其中mysql密码和账号都是www

$

mysql

-uwww

-pwww

-hlocalhost

-e

"show

databases"

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

|

database

|

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

|

information_schema

|

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

$

如果要执行不止一条命令,则可以先写到一个文件中,然后再用输入重定向完成。比如我可以把sql指令都写到/tmp/sqltest中然后

$

mysql

-uwww

-pwww

-hlocalhost

<

/tmp/testsql

database

information_schema

$

#注:为方便,我

testsql

中还是只有一条命令,还是

show

databases

主要有以下几种方法:

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


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

原文地址: http://outofmemory.cn/yw/8888545.html

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

发表评论

登录后才能评论

评论列表(0条)

保存