mysql shell 提示_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

表2:am_tag_user_4

am_tag_user_4表

atu_user_id

atu_tag_id

atu_num

374

0

9

374

89

9

更新结果目标表:am_tag_user_4

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(...)"

优点:语句简单

缺点:支持的sql相对简单

方案2

准备一个sql脚本,名字为update.sql,例如:

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='访问日志';

新建一个update_mysql.sh,内容如下:

use chbdb;

source update.sql

然后执行如下命令:

cat update_mysql.sh | mysql --user=root -ppassword

优点:支持复杂的sql脚本

缺点:

1> 需要两个文件:update.sql和update_mysql.sh

2> 一旦中间出错,之后脚本就不会执行,例如:

如果第一张表已经存在,则会报出如下异常:

ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists

然后脚本退出,第二张表也就无法创建。

方案3

新建一个shell脚本,格式如下:

#!/bin/bash

mysql -u* -h* -p* <

Your SQL script.

EOF

例如:

#!/bin/bash

mysql-uroot -ppassword <

use chbdb;

CREATE TABLE user (id varchar(36) NOT NULL COMMENT '主键',

username varchar(50) NOT NULL COMMENT '用户名',

password varchar(50) NOT NULL COMMENT '用户密码',

createdatedate NOT NULL COMMENT '创建时间',

ageint(11) NOT NULL COMMENT '年龄',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';

EOF

优点:

1>支持复杂的sql脚本

2>无需其它额外文件

缺点:

1> 表名、字段不能使用单引号,需要修改原有sql语句

2> 一旦中间出错,之后脚本就不会执行,例如:

如果第一张表已经存在,则会报出如下异常:

ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists

然后脚本退出,第二张表也就无法创建。

方案4

准备一个sql脚本,如update.sql,然后执行如下命令:

mysql -uroot -ppassword 

优点:支持复杂的sql脚本

缺点:

1> 一旦中间出错,之后脚本就不会执行,例如:

如果第一张表已经存在,则会报出如下异常:

ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists

然后脚本退出,第二张表也就无法创建。

大家知道在mysql命令行中使用source命令,即使中间出错,后续脚本也会继续执行,但是如上几种方式,均无法解决该问题,如果大家有好的建议,请回复,谢谢。

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

Logging to file '/tmp/temp.log'

id      val

1       jack

2       robin

3       mark

Outfile disabled.

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

[root@SZDB ~]# mysql -uroot -p123456 /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 <

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值