mysql 查詢10分鐘以內的數據:
select *from t_agent where int_last_login>=CURRENT_TIMESTAMP - INTERVAL 10 MINUTE;
mysql關聯多表進行update更新操作
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
- mysql?-uuser?-ppasswd?-e"insert?LogTable?values(...)"??
方案2
- CREATE?TABLE?`user`?(??
- ??`id`?varchar(36)?NOT?NULL?COMMENT?'主鍵',??
- ??`username`?varchar(50)?NOT?NULL?COMMENT?'用戶名',??
- ??`password`?varchar(50)?NOT?NULL?COMMENT?'用戶密碼',??
- ??`createdate`?date?NOT?NULL?COMMENT?'創建時間',??
- ??`age`?int(11)?NOT?NULL?COMMENT?'年齡',??
- ??PRIMARY?KEY??(`id`)??
- )?ENGINE=MyISAM?DEFAULT?CHARSET=utf8?COMMENT='用戶信息表';??
- DROP?TABLE?IF?EXISTS?`visit_log`;??
- CREATE?TABLE?`visit_log`?(??
- ??`id`?varchar(36)?character?set?utf8?NOT?NULL,??
- ??`type`?int(11)?NOT?NULL,??
- ??`content`?text?character?set?utf8?NOT?NULL,??
- ??`createdate`?date?NOT?NULL,??
- ??PRIMARY?KEY??(`id`)??
- )?ENGINE=MyISAM?DEFAULT?CHARSET=latin1?COMMENT='訪問日志';??
- use?chbdb;??
- source?update.sql??
- cat?update_mysql.sh?|?mysql?--user=root?-ppassword??
方案3
- #!/bin/bash??
- mysql?-u*?-h*?-p*?<<EOF??
- ????Your?SQL?script.??
- EOF??
#!/bin/bash mysql -uroot -ppassword <<EOF use chbdb; CREATE TABLE user ( id varchar(36) NOT NULL COMMENT '主鍵', username varchar(50) NOT NULL COMMENT '用戶名', password varchar(50) NOT NULL COMMENT '用戶密碼', createdate date NOT NULL COMMENT '創建時間', age int(11) NOT NULL COMMENT '年齡', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用戶信息表'; EOF
?
方案4
- mysql?-uroot?-ppassword?<?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??
??
#以上腳本演示中,作拋磚引玉只用,對于輸出的結果不是很規整友好,需要進一步改善和提高。
?