关系型数据库(RDBMS)及ORM框架

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();
        }
    }
}

2.2.方法2(利用Mybatis的批量插入)

2.3.利用存储过程

上一篇下一篇

猜你喜欢

热点阅读