mysql shell
mysql 查詢10分鐘以內(nèi)的數(shù)據(jù):
select *from t_agent where int_last_login>=CURRENT_TIMESTAMP - INTERVAL 10 MINUTE;
mysql關(guān)聯(lián)多表進行update更新操作 UPDATE Track INNER JOIN MV ON Track.trkid=MV.mvid SET Track.is_show=MV.is_show WHERE trkid<6 等同于 UPDATE Track,MV SET Track.is_show=MV.is_show WHERE Track.trkid=MV.mvid and trkid<6 【擴展】 根據(jù)結(jié)果集進行update更新操作 原表信息 表1:am_favorites_4
| am_favorites_4表 | |||
| af_user_id | af_tag_id | af_content_id | af_content_type |
| 374 | 0 | 535522 | 3 |
| 374 | 0 | 535522 | 3 |
| 374 | 89 | 535522 | 3 |
| am_tag_user_4表 | ||
| atu_user_id | atu_tag_id | atu_num |
| 374 | 0 | 9 |
| 374 | 89 | 9 |
| am_tag_user_4?表 | ||
| atu_user_id | atu_tag_id | atu_num |
| 374 | 0 | 7 |
| 374 | 89 | 8 |
UPDATE?am_tag_user_4 tag
INNER?JOIN?am_favorites_4 fav
ON?tag.atu_tag_id=fav.af_tag_id?and?tag.atu_user_id=fav.af_user_id
INNER?JOIN?(SELECT??af_user_id,af_tag_id,count(*)?as?cnt
FROM?am_favorites_4,am_tag_user_4
where?atu_tag_id=af_tag_id?and?atu_user_id=af_user_id?and?af_content_id?=?535522?andaf_content_type=3?and?af_user_id=374
group?by?af_user_id,af_tag_id)?AS?T1
ON?tag.atu_tag_id=T1.af_tag_id?and?tag.atu_user_id=T1.af_user_id
SET?tag.atu_num=tag.atu_num-?T1.cnt
http://blog.sina.com.cn/s/blog_4c197d420101aer2.html
?
在shell開發(fā)中,很多時候我們需要操作mysql數(shù)據(jù)庫(比如:查詢數(shù)據(jù)、導(dǎo)出數(shù)據(jù)等),但是我們又無法進入mysql命令行的環(huán)境,就需要在shell環(huán)境中模擬mysql的環(huán)境,使用mysql相關(guān)命令,本文總結(jié)幾種shell操作mysql的方法,供大家參考。
方案1
方案2
準(zhǔn)備一個sql腳本,名字為update.sql,例如:方案3
新建一個shell腳本,格式如下:?
優(yōu)點: 1>支持復(fù)雜的sql腳本 2>無需其它額外文件 缺點: 1> 表名、字段不能使用單引號,需要修改原有sql語句 2> 一旦中間出錯,之后腳本就不會執(zhí)行,例如: 如果第一張表已經(jīng)存在,則會報出如下異常: ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists 然后腳本退出,第二張表也就無法創(chuàng)建。方案4
準(zhǔn)備一個sql腳本,如update.sql,然后執(zhí)行如下命令:http://www.cnblogs.com/wangkangluo1/archive/2012/04/27/2472898.html
?
對于自動化運維,諸如備份恢復(fù)之類的,DBA經(jīng)常需要將SQL語句封裝到shell腳本。本文描述了在Linux環(huán)境下mysql數(shù)據(jù)庫中,shell腳本下調(diào)用sql語句的幾種方法,供大家參考。對于腳本輸出的結(jié)果美化,需要進一步完善和調(diào)整。以下為具體的示例及其方法。
1、將SQL語句直接嵌入到shell腳本文件中
?
復(fù)制代碼代碼如下:--演示環(huán)境??
[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、命令行調(diào)用單獨的SQL文件
?
復(fù)制代碼代碼如下:[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、使用管道符調(diào)用SQL文件
?
復(fù)制代碼代碼如下:[root@SZDB ~]# mysql -uroot -p123456 </root/temp.sql??
Logging to file '/tmp/temp.log'??
id????? val??
1?????? jack??
2?????? robin??
3?????? mark??
Outfile disabled.??
??
#使用管道符調(diào)用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提示符下調(diào)用SQL
?
復(fù)制代碼代碼如下:[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腳本中變量輸入與輸出
?
復(fù)制代碼代碼如下:[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??
??
#以上腳本演示中,作拋磚引玉只用,對于輸出的結(jié)果不是很規(guī)整友好,需要進一步改善和提高。 http://www.jb51.net/article/56944.htm
?
轉(zhuǎn)載于:https://www.cnblogs.com/softidea/p/6043674.html
總結(jié)
以上是生活随笔為你收集整理的mysql shell的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js的JSON
- 下一篇: SQL 强制指定索引加快查询速度