在shell开发中,很多时候我们需要操作mysql数据库(比如:查询数据、导出数据等),但是我们又无法进入mysql命令行的环境,就需要在shell环境中模拟mysql的环境,使用mysql相关命令,本文总结几种shell操作mysql的方法,供大家参考。
方案1
view plaincopy to clipboardprint?
01.mysql -uuser -ppasswd -e"insert LogTable values(...)"
mysql -uuser -ppasswd -e"insert LogTable values(...)"
优点:语句简单
缺点:支持的sql相对简单
方案2
准备一个sql脚本,名字为update.sql,例如:
view plaincopy to clipboardprint?
01.CREATE TABLE `user` (
02. `id` varchar(36) NOT NULL COMMENT '主键',
03. `username` varchar(50) NOT NULL COMMENT '用户名',
04. `password` varchar(50) NOT NULL COMMENT '用户密码',
05. `createdate` date NOT NULL COMMENT '创建时间',
06. `age` int(11) NOT NULL COMMENT '年龄',
07. PRIMARY KEY (`id`)
08.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
09.DROP TABLE IF EXISTS `visit_log`;
10.CREATE TABLE `visit_log` (
11. `id` varchar(36) character set utf8 NOT NULL,
12. `type` int(11) NOT NULL,
13. `content` text character set utf8 NOT NULL,
14. `createdate` date NOT NULL,
15. PRIMARY KEY (`id`)
16.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='访问日志';
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=utf8 COMMENT='访问日志';
新建一个update_mysql.sh,内容如下:
view plaincopy to clipboardprint?
01.use chbdb;
02.source update.sql
use chbdb;
source update.sql
然后执行如下命令:
view plaincopy to clipboardprint?
01.cat update_mysql.sh | mysql --user=root -ppassword
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脚本,格式如下:
view plaincopy to clipboardprint?
01.#!/bin/bash
02.mysql -u* -h* -p* <<EOF
03. Your SQL script.
04.EOF
#!/bin/bash
mysql -u* -h* -p* <<EOF
Your SQL script.
EOF
例如:
view plaincopy to clipboardprint?
01.#!/bin/bash
02.mysql -uroot -ppassword <<EOF
03. use chbdb;
04. CREATE TABLE user (
05. id varchar(36) NOT NULL COMMENT '主键',
06. username varchar(50) NOT NULL COMMENT '用户名',
07. password varchar(50) NOT NULL COMMENT '用户密码',
08. createdate date NOT NULL COMMENT '创建时间',
09. age int(11) NOT NULL COMMENT '年龄',
10. PRIMARY KEY (`id`)
11.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
#!/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='用户信息表';
优点:
1>支持复杂的sql脚本
2>无需其它额外文件
缺点:
1> 表名、字段不能使用单引号,需要修改原有sql语句
2> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
方案4
准备一个sql脚本,如update.sql,然后执行如下命令:
view plaincopy to clipboardprint?
01.mysql -uroot -ppassword < update.sql
mysql -uroot -ppassword < update.sql
优点:支持复杂的sql脚本
缺点:
1> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
大家知道在mysql命令行中使用source命令,即使中间出错,后续脚本也会继续执行,但是如上几种方式,均无法解决该问题,如果大家有好的建议,请回复,谢谢!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hbcui1984/archive/2010/01/03/5125387.aspx
方案1
view plaincopy to clipboardprint?
01.mysql -uuser -ppasswd -e"insert LogTable values(...)"
mysql -uuser -ppasswd -e"insert LogTable values(...)"
优点:语句简单
缺点:支持的sql相对简单
方案2
准备一个sql脚本,名字为update.sql,例如:
view plaincopy to clipboardprint?
01.CREATE TABLE `user` (
02. `id` varchar(36) NOT NULL COMMENT '主键',
03. `username` varchar(50) NOT NULL COMMENT '用户名',
04. `password` varchar(50) NOT NULL COMMENT '用户密码',
05. `createdate` date NOT NULL COMMENT '创建时间',
06. `age` int(11) NOT NULL COMMENT '年龄',
07. PRIMARY KEY (`id`)
08.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
09.DROP TABLE IF EXISTS `visit_log`;
10.CREATE TABLE `visit_log` (
11. `id` varchar(36) character set utf8 NOT NULL,
12. `type` int(11) NOT NULL,
13. `content` text character set utf8 NOT NULL,
14. `createdate` date NOT NULL,
15. PRIMARY KEY (`id`)
16.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='访问日志';
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=utf8 COMMENT='访问日志';
新建一个update_mysql.sh,内容如下:
view plaincopy to clipboardprint?
01.use chbdb;
02.source update.sql
use chbdb;
source update.sql
然后执行如下命令:
view plaincopy to clipboardprint?
01.cat update_mysql.sh | mysql --user=root -ppassword
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脚本,格式如下:
view plaincopy to clipboardprint?
01.#!/bin/bash
02.mysql -u* -h* -p* <<EOF
03. Your SQL script.
04.EOF
#!/bin/bash
mysql -u* -h* -p* <<EOF
Your SQL script.
EOF
例如:
view plaincopy to clipboardprint?
01.#!/bin/bash
02.mysql -uroot -ppassword <<EOF
03. use chbdb;
04. CREATE TABLE user (
05. id varchar(36) NOT NULL COMMENT '主键',
06. username varchar(50) NOT NULL COMMENT '用户名',
07. password varchar(50) NOT NULL COMMENT '用户密码',
08. createdate date NOT NULL COMMENT '创建时间',
09. age int(11) NOT NULL COMMENT '年龄',
10. PRIMARY KEY (`id`)
11.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
#!/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='用户信息表';
优点:
1>支持复杂的sql脚本
2>无需其它额外文件
缺点:
1> 表名、字段不能使用单引号,需要修改原有sql语句
2> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
方案4
准备一个sql脚本,如update.sql,然后执行如下命令:
view plaincopy to clipboardprint?
01.mysql -uroot -ppassword < update.sql
mysql -uroot -ppassword < update.sql
优点:支持复杂的sql脚本
缺点:
1> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
大家知道在mysql命令行中使用source命令,即使中间出错,后续脚本也会继续执行,但是如上几种方式,均无法解决该问题,如果大家有好的建议,请回复,谢谢!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hbcui1984/archive/2010/01/03/5125387.aspx
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/3649/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表