mysql安装及预置数据
2019-01-06 本文已影响0人
suxin1932
1.mysql安装与卸载
1.1docker下安装并启动mysql
#1.下载并启动容器(一行命令执行, 莫换行)
docker run --rm --name mysql5.7 -p 3306:3306 -v /my/mysql/datadir:/var/lib/mysql -v /my/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
#命令解析:
docker run时, 若docker中没有该资源, 会自动去下载pull, 然后run
--rm: 当容器退出时(如docker stop mysql5.7), 自动移除容器及其数据, "危险"
--name:容器名
--p:映射宿主主机端口
-v:挂载宿主目录到容器目录
-e:设置环境变量,此处指定root密码
-d:后台运行容器
(可采用docker run --help查看可用命令)
#2.进入mysql命令行
docker exec -it mysql5.7 mysql -uroot -p
#3.进入mysql所在宿主机
docker exec -it mysql5.7 /bin/bash
#4.此时可用navicat获sqlyog来连接该库即可
1.2 用户管理
#root用户进入
mysql -u root -p
#给用户分配权限
grant usage on *.* to 'zhangyu'@'%' identified by 'zhangyu' with grant option;
#创建数据库
create database springboot;
#赋予该用户数据库权限
grant all privileges on springboot.* to zhangyu@'%' identified by 'zhangyu';
2.数据预置
2.1.方法1(原生jdbc):
package com.zy.demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import java.util.concurrent.locks.ReentrantLock;
public class BatchInsert extends Thread {
//定义锁对象
private final ReentrantLock lock=new ReentrantLock();
public void run() {
String url = "jdbc:mysql://192.168.0.199/batch_insert";
String name = "com.mysql.jdbc.Driver";
String user = "root";
String password = "123456";
Connection conn = null;
try {
Class.forName(name);
conn = DriverManager.getConnection(url, user, password);//获取连接
conn.setAutoCommit(false);//关闭自动提交,不然conn.commit()运行到这句会报错
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
// 开始时间
Long begin = new Date().getTime();
// sql前缀
String prefix = "INSERT INTO stu (id,name,lang) VALUES ";
try {
// 保存sql后缀
StringBuffer suffix = new StringBuffer();
// 设置事务为非自动提交
conn.setAutoCommit(false);
// 比起st,pst会更好些
PreparedStatement pst = (PreparedStatement) conn.prepareStatement("");//准备执行语句
// 外层循环,总提交事务次数
suffix = new StringBuffer();
for (int i = 1; i <= 10; i++) {
// 第j次提交步长
for (int j = 1; j <= 100; j++) {
// 构建SQL后缀
for (int k = 1; k <= 100; k++) {
suffix.append("('a" + i + "','b" + j + "','c" + k + "'),");
}
}
}
// 构建完整SQL
String sql = prefix + suffix.substring(0, suffix.length() - 1);
// 添加执行SQL
pst.addBatch(sql);
// 执行操作
pst.executeBatch();
// 提交事务
conn.commit();
// 清空上一次添加的数据
suffix = new StringBuffer();
// 头等连接
pst.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
// 结束时间
Long end = new Date().getTime();
// 耗时
System.out.println("100万条数据插入花费时间 : " + (end - begin) / 1000 + " s"+" 插入完成");
}
}
package com.zy.demo;
public class BatchInsertTest {
public static void main(String[] args) {
for (int i = 1; i <=10; i++) {
new BatchInsert().start();
}
}
}