基于CentOS的MySQL学习补充四–使用Shell批量从CSV文件中插入数据到数据表
最后更新于:2022-04-01 09:56:41
[本文出处:http://blog.csdn.net/u012377333/article/details/47022699](http://blog.csdn.net/u012377333/article/details/47022699)
从上面的几篇文章中,可以知道如何[使用Shell创建数据库](http://blog.csdn.net/u012377333/article/details/47001007),[使用Shell创建数据表](http://blog.csdn.net/u012377333/article/details/47006087),本文继续介绍Shell结合MySQL的使用--如何使用Shell批量插入数据?
这里涉及一点MySQL其他的知识,[如何导入或者导出数据?](http://blog.csdn.net/u012377333/article/details/47022469)
首先做这些之前,需要按照上面所介绍的创建好数据库和数据库表,然后就是将要查询到数据库中的数据写到CSV文件中,由于个人比较懒,选择从一个现成的数据库中导出一部分数据用于测试。
创建了一个名字叫做[t_prov_city_area_street](http://download.csdn.net/detail/u012377333/8926341)的数据表,关于如何创建这个表可以去我的资源里面下载创建该表的sql脚本,该脚本的名字是[t_prov_city_area_street.sql](http://download.csdn.net/detail/u012377333/8926341)。然后就是使用上面介绍的方法,导出关于所有省的信息,导出方法如下:
~~~
<span style="font-family:Microsoft YaHei;font-size:14px;">SELECT * FROM t_prov_city_area_street WHERE level=3 INTO OUTFILE '/tmp/prov_csv' FIELDS TERMINATED BY ',';</span>
~~~
我们就会得到一个保存着所有省级信息的CSV文件[prov.csv](http://download.csdn.net/detail/u012377333/8926341),同样可以在资源里面找到这个文件。
接下来就是重点部分了Shell脚本批量插入数据:
~~~
#!/bin/sh
#Author: chisj
#Date: 2015.7.23
#Describe Insert Data TO Table 'sct_Province'
#The username of mysql database
USER="root"
#The password of mysql database
PASS="dragonwake"
#The datebase name will be created
DATABASE="SmartCare"
TABLE="sct_Province"
TABLE_DATA="prov.csv"
if [ -f ${TABLE_DATA} ]; then
echo "File ${TABLE_DATA} Existed."
else
echo "File ${TABLE_DATA} Not Existed."
echo
exit 2
fi
while read line;
do
query=`echo $line | awk -F, '{printf("\"%s\", \"%s\", \"%s\", \"%s\"", $2, $3, $4, $5)}'`
statement=`echo "insert into ${TABLE}(ProvinceCode, ParentID, ProvinceName, Level) values($query)"`
echo $statement
mysql -u $USER -p$PASS $DATABASE << EOF > /dev/null
insert into ${TABLE}(ProvinceCode, ParentID, ProvinceName, Level) values($query);
EOF
done < $TABLE_DATA
if [ $? -eq 0 ]; then
echo "Insert Data Into $TABLE Success."
fi
~~~
执行shell脚本的时候的截图,可以参考一下:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8cd0f1b.jpg)
插入完成之后,查询结果的截图:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8d0175d.jpg)
由于我希望主键ProvinceID是自增长的,不想使用csv里面的数据,所有脚本里面有一点点的改变,就是
~~~
query=`echo $line | awk -F, '{printf("\"%s\", \"%s\", \"%s\", \"%s\"", $2, $3, $4, $5)}'`
statement=`echo "insert into ${TABLE}(ProvinceCode, ParentID, ProvinceName, Level) values($query)"`
~~~
和
~~~
query=`echo $line | awk -F, '{printf("\"%s\", \"%s\", \"%s\", \"%s\", \"%s\"", $1, $2, $3, $4, $5)}'`
statement=`echo "insert into ${TABLE} values($query)"`
~~~
以及
~~~
insert into ${TABLE}(ProvinceCode, ParentID, ProvinceName, Level) values($query);</span>
~~~
和
~~~
insert into ${TABLE} values($query);
~~~
替换就可以了。
在验证数据是否插入成功的时候,会发现有乱码,我在创建数据的时候有设置为utf8格式,为什么还会这样的,后来我重启了mysqld服务就可以正常看到中文了。
### 所有的脚本和CSV文件:[Shell脚本批量添加CSV数据到MySQL](http://download.csdn.net/detail/u012377333/8926341)
基于CentOS的MySQL学习补充三–使用Shell批量创建数据库表
最后更新于:2022-04-01 09:56:38
[本文出处:http://blog.csdn.net/u012377333/article/details/47006087](http://blog.csdn.net/u012377333/article/details/47006087)
接上篇介绍[《基于CentOS的Mysql学习补充二--使用Shell创建数据库》](http://blog.csdn.net/u012377333/article/details/47001007),本文继续探索关于Shell和MySQL的结合使用,我不知道当一个数据库设计完成之后如何快速的创建设计好的数据库表和添加相应基本数据,我目前知道的就是使用Shell和SQL脚本来达到我的目的--快速的、多次的、可重复利用的创建数据库表。
创建一个数据库表的SQL脚本:
~~~
/************************************************************
#Author: chisj
#Date: 2015.7.22
#Describe: Create Database 'SmartCare' Table 'sct_Province'
*************************************************************/
USE SmartCare;
DROP TABLE IF EXISTS `sct_Province`;
CREATE TABLE `sct_Province`(
`ProvinceID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`ProvinceCode` varchar(11) DEFAULT NULL,
`ParentID` varchar(11) DEFAULT NULL,
`ProvinceName` varchar(50) DEFAULT NULL,
`Level` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`ProvinceID`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
~~~
执行指定目录下所有的SQL脚本(指定目录,多个SQL脚本)的Shell脚本:
~~~
#!/bin/bash
#Author: chisj
#Time: 2015.7.22
#Describe: Create Database Table
#The username of mysql database
USER="root"
#The password of mysql database
PASS="dragonwake"
#The datebase name will be created
DATABASE="SmartCare"
LOCATION=${PWD}
CREATE_TABLE_SCT=create_table_sct_
for table_name in `ls ${LOCATION}/${CREATE_TABLE_SCT}*`
do
mysql -u $USER -p$PASS << EOF > /dev/null
SOURCE ${table_name};
EOF
if [ $? -eq 0 ]; then
echo "Create Table ${table_name} Success!"
fi
done
~~~
其实关于Shell批量创建数据表的方法很多,之前又看到过,可惜没有记住0.0,可见记录很重要哟
所以我还是按照我的思路重新弄了一遍:首先写好创建数据表的SQL脚本是必要的,可以将所有的都写在一个里面(个人觉得不好),也可以按照一个表写一个SQL脚本(目前我市采用这种方法),然后就是在指定目录下面按照指定SQL脚本名进行遍历,找到一个创建数据库表SQL脚本,然后就执行一次。
同样给出CSDN的下载地址:[Shell创建MySQL数据表](http://download.csdn.net/detail/u012377333/8923639)
基于CentOS的Mysql学习补充二–使用Shell创建数据库
最后更新于:2022-04-01 09:56:36
文章出处:[基于CentOS的Mysql学习补充二--使用Shell创建数据库](http://blog.csdn.net/u012377333/article/details/47001007)
关于使用基于命令使用mysql数据库的方法可见文章[《基于CentOS的Mysql的使用说明》](http://blog.csdn.net/u012377333/article/details/45565521),本文只要介绍如何使用Shell脚本来创建我们想要的数据库,下面给出我创建数据库的Shell脚本,基本也就是将mysql的一些命令放在shell脚本里面而已。
~~~
#!/bin/bash
#Author: chisj
#Time: 2015.7.22
#Describe: Create Database
#The username of mysql database
USER="root"
#The password of mysql database
PASS="dragonwake"
#The datebase name will be created
DATABASE="SmartCare"
mysql -u $USER -p$PASS << EOF >/dev/null
CREATE DATABASE $DATABASE
EOF
~~~
这里说明几点需要注意的问题
1、如果是在windows下面编辑上面这个脚本,然后在linux下面去执行,可能会出现这个问题
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8cbb480.jpg)
从上图也可以看到我这里的解决方法,使用命令dos2unix将windows文件格式转化为linux(unix)文件格式
` #dos2unix filename`
当然前提是需要你的系统安装了该命令,默认系统时不安装的,可以使用yum进行安装
` #yum install dos2unix`
这里给出一份linux文件格式的脚本
### [shell创建mysql数据库](http://download.csdn.net/detail/u012377333/8922289)
基于centos的mysql学习补充一
最后更新于:2022-04-01 09:56:34
导出mysql数据库中的某个数据库的sql脚本--也就是说将该数据库的结构和数据导入到一个sql脚本中,之后可以通过该sql脚本恢复该数据库。
~~~
mysqldump -u mysql(用户名:mysql) -pmysql(密码:mysql) p2pserver(数据库名:p2pserver) > p2pserver.sql(脚本名:p2pserver.sql)
~~~
如果需要导出全部的数据库脚本
~~~
<pre name="code" class="plain"><pre name="code" class="cpp">mysqldump -u mysql(用户名:mysql) -pmysql(密码:mysql) -A > p2pserver.sql(文件名:p2pserver.sql)
~~~
这是里面关于wp_users的sql语句:
~~~
DROP TABLE IF EXISTS `wp_users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `wp_users` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_login` varchar(60) NOT NULL DEFAULT '',
`user_pass` varchar(64) NOT NULL DEFAULT '',
`user_nicename` varchar(50) NOT NULL DEFAULT '',
`user_email` varchar(100) NOT NULL DEFAULT '',
`user_url` varchar(100) NOT NULL DEFAULT '',
`user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`user_activation_key` varchar(60) NOT NULL DEFAULT '',
`user_status` int(11) NOT NULL DEFAULT '0',
`display_name` varchar(250) NOT NULL DEFAULT '',
PRIMARY KEY (`ID`),
KEY `user_login_key` (`user_login`),
KEY `user_nicename` (`user_nicename`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
~~~
关于PRIMAY KEY和KEY这两个关键字是什么含义呢?
PRIMAY KEY是主键,保证数据的唯一性;
KEY是索引约束,对表中字段进行约束索引,常见的有foreign key。KEY是关键字,在每一张表所有记录中唯一,在普通的表一般可以省去这一项。如果设置了该关键字,在查询表的时候会加速查询,但是会增加其他负担。
基于CentOS的Mysql的使用说明
最后更新于:2022-04-01 09:56:32
[请声明出处:http://write.blog.csdn.net/postedit/45565521](http://write.blog.csdn.net/postedit/45565521)
本文主要是记录本人在CentOS系统下面使用Mysql的一些命令和操作,特此记录。
[本文档的下载地址:http://download.csdn.net/detail/u012377333/8673599](http://download.csdn.net/detail/u012377333/8673599)
1 检查是否安装了mysql
~~~
#rpm –qa | grep mysql
~~~
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8aa722f.jpg)
2 检查mysqld服务是否开启
` #service mysqld status
`
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8abf060.jpg)
3 启动mysqld服务
` #service mysqld start`
第一次启动会初始化,时间会有点久…
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8ad1828.jpg)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8ae4df2.jpg)
4 设置用户root的密码
#/usr/bin/mysqladmin –u root password ‘dragonwake’
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8b09287.jpg)
5 本地连接数据库
#mysql –u root -pdragonwake
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8b1b3cc.jpg)
6 显示所有的数据库
mysql>show databases;
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8b30f99.jpg)
7 使用mysql数据库
mysql>use mysql;
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8b3ed7d.jpg)
8 显示当下数据库(mysql)所有的表
mysql>show tables;
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8b4f63e.jpg)
9 查看表(mysql.user)结构
mysql>describe user;
还有其他的方法:
a) mysql>desc user;
b) mysql>show columns from user;
c) mysql>show create tables user;
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8b63a59.jpg)
10 添加一个mysql用户
mysql>insert into mysql.user(Host,User,password) values(‘localhost’,’mysql’,password(‘mysql’));
刷新系统权限表
mysql>flush privileges;
主机为’localhost’,说明只能在本地登录,要想远程登录,主机改为’%’。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8b72307.jpg)
11 创建一个数据库smartDB
mysql>create database smartDB;
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8b83711.jpg)
12 授权mysql用户拥有数据库smartDB所有权限(某个数据库的全部权限)
~~~
mysql>grant all privileges on smartDB.* to mysql@localhost identified by ‘mysql’;
~~~
刷新系统权限表
`mysql>flush privileges;`
上面是对本地的授权@localhost,对于非本地授权@”%”。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8b91a83.jpg)
13 退出连接
`mysql>quit;`
a) mysql>exit;
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8ba16b4.jpg)
14 使用mysql用户登录
` #mysql –u mysql –pmysql`
和上面root用户登录是一样的方法。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8baf539.jpg)
15 创建数据库smartDB的表p2p_tb_camera
切换到数据库smartDB
`mysql>use smartDB;`
创建数据库表p2p_tb_camera
~~~
mysql>create table p2p_tb_camera(
ipc_id char(7) not null primary key,
sn varchar(16) not null,
entid varchar(20) not null,
enc varchar(30) not null
);
~~~
显示当选数据库smartDB下面所有的表
mysql>show tables;
显示表p2p_tb_camera的结构
mysql>desc p2p_tb_camera;
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8bc2226.jpg)
17 插入数据
~~~
mysql>insert p2p_tb_camera values(‘758871’, ‘01AE465D08141280’, ‘1426822572_e3575b
18208b’);
~~~
当然,上面这么写是因为插入所有的数据,如果要指定字段插入数据,只插入ipc_id的值:
`mysql>insert p2p_tb_camera(ipc_id) values(‘123456’);`
实际上,没有办法把数据插入到表中,因为表限制了sn,entid,enc的值为非空。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8bdb519.jpg)
18 查询数据
`mysql>select * from p2p_tb_camera;`
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8be9f8f.jpg)
19 更新数据
更新表p2p_tb_camera中字段sn的值为111,更新条件为ipc_id的值758871和entid的值1
`mysql>update p2p_tb_camera set sn=’111’ where ipc_id=’758871’ and entid=’1’;
`
查询更新后的数据
`mysql>select * from p2p_tb_camera;`
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8c08bee.jpg)
20 删除数据
删除表p2p_tb_camera中的数据记录,删除条件为ipc_id的值758871和sn的值111
`mysql>delete from p2p_tb_camera where ipc_id=’758871’ and sn=’111’;
`
查询更新后的数据
~~~
mysql>select * from p2p_tb_camera;
~~~
表p2p_tb_camera中没有任何数据
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8c1c13f.jpg)
21 删除表
删除表p2p_tb_camera
~~~
mysql>drop table p2p_tb_camera;
~~~
查询当前数据库smartDB删除表之后的表
`mysql>show tables;`
删除表p2p_tb_camera之后,数据库smartDB没有表了
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8c320d9.jpg)
22 执行sql脚本
脚本create_table_p2p_tb_camera.sql的内容:
~~~
use smartDB;
create table p2p_tb_camera(
ipc_id char(7) not null primary key,
sn varchar(16) not null,
entid varchar(20) not null,
enc varchar(30) not null
);
~~~
执行脚本/opt/smartcare/p2pserver/tools/mysql/create_p2p_tb_camera.sql
`mysql>source /opt/smartcare/p2pserver/tools/mysql/create_p2p_tb_camera.sql`
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8c43b15.jpg)
23 删除数据库
删除数据库smartDB
mysql>drop database smartDB;
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8c43b15.jpg)
24 修改mysql用户密码
修改用户mysql的密码为dragonwake
`mysql>update mysql.user ser password-password(‘dragonwake’) where User=’mysql’;`
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8c756fa.jpg)
25 删除用户
删除用户mysql
`mysql>delete form mysql.user where User=’mysql’;`
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8c89712.jpg)
26删除用户权限
删除用户mysql的权限
`mysql>drop user mysql@localhost;`
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-17_56ea5d8c99614.jpg)
前言
最后更新于:2022-04-01 09:56:29
> 原文出处:[踟蹰MySQL](http://blog.csdn.net/column/details/mysql1.html)
> 作者:[u012377333](http://blog.csdn.net/u012377333)
**本系列文章经作者授权在看云整理发布,未经作者允许,请勿转载!**
# 踟蹰MySQL
> MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。