mysql shell
mysql 查詢10分鐘以內的數據:
select *from t_agent where int_last_login>=CURRENT_TIMESTAMP - INTERVAL 10 MINUTE;
mysql關聯多表進行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 【擴展】 根據結果集進行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開發中,很多時候我們需要操作mysql數據庫(比如:查詢數據、導出數據等),但是我們又無法進入mysql命令行的環境,就需要在shell環境中模擬mysql的環境,使用mysql相關命令,本文總結幾種shell操作mysql的方法,供大家參考。
方案1
方案2
準備一個sql腳本,名字為update.sql,例如:方案3
新建一個shell腳本,格式如下:?
優點: 1>支持復雜的sql腳本 2>無需其它額外文件 缺點: 1> 表名、字段不能使用單引號,需要修改原有sql語句 2> 一旦中間出錯,之后腳本就不會執行,例如: 如果第一張表已經存在,則會報出如下異常: ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists 然后腳本退出,第二張表也就無法創建。方案4
準備一個sql腳本,如update.sql,然后執行如下命令:http://www.cnblogs.com/wangkangluo1/archive/2012/04/27/2472898.html
?
對于自動化運維,諸如備份恢復之類的,DBA經常需要將SQL語句封裝到shell腳本。本文描述了在Linux環境下mysql數據庫中,shell腳本下調用sql語句的幾種方法,供大家參考。對于腳本輸出的結果美化,需要進一步完善和調整。以下為具體的示例及其方法。
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://www.jb51.net/article/56944.htm
?
轉載于:https://www.cnblogs.com/softidea/p/6043674.html
總結
以上是生活随笔為你收集整理的mysql shell的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js的JSON
- 下一篇: HDU 6188 Duizi and S