mysql表数据初始化10万条数据库_Koa 连接mysql数据,mysql数据库表初始化脚本

以下脚本是借鉴 chenshenhai 大佬的 Koa 教程中的代码,并对其进行修改。整个初始化步骤作为记录,方便以后快速查阅。

目录结构:

-sql

- data.sql

- user.sql

- db

- mysql_config.js // 数据库配置

- async_db.js // 数据库的查询和初始化函数

- util

- get_sql_content_map.js 对sql目录下的 .sql文件内容读取并组合成 Map 映射关系

- get_sql_map.js

- walk_file.js

- index.js // 初始化入口文件

sql 目录下

data.sql

CREATE TABLE IF NOT EXISTS `data` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`data_info` json DEFAULT NULL,

`create_time` varchar(20) DEFAULT NULL,

`modified_time` varchar(20) DEFAULT NULL,

`level` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

user.sql

CREATE TABLE IF NOT EXISTS `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`email` varchar(255) DEFAULT NULL,

`password` varchar(255) DEFAULT NULL,

`name` varchar(255) DEFAULT NULL,

`nick` varchar(255) DEFAULT NULL,

`detail_info` json DEFAULT NULL,

`create_time` varchar(20) DEFAULT NULL,

`modified_time` varchar(20) DEFAULT NULL,

`level` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `user` set email='1@example.com', password='123456';

INSERT INTO `user` set email='2@example.com', password='123456';

INSERT INTO `user` set email='3@example.com', password='123456';

util 目录下

walk_file.js

// 遍历sql脚本文件

const fs = require("fs");

const path = require("path");

module.exports = waleFile;

/**

*

* @param {String} pathResolve

* @param {String} mime 文件后缀名

*/

function waleFile(pathResolve, mime) {

const files = fs.readdirSync(pathResolve);

const fileList = {};

for (let [i, item] of files.entries()) {

const ext = path.extname(item).replace(/\./, "");

if (ext === mime) {

fileList[item] = path.join(pathResolve, item);

}

}

return fileList;

}

get_sql_map.js

/**

获取所有sql脚本文件

*/

const path = require("path");

const waleFile = require("./walk_file");

/**

* @returns {Object}

*/

function getSqlMap() {

debugger;

// 当前模块所在的目录地址

const sqlPath = path.resolve(__dirname, "..", "sql");

return waleFile(sqlPath, "sql");

}

module.exports = getSqlMap;

get_sql_content_map.js

/**

获取 sql脚本文件内容

*/

const fs = require("fs");

const getSqlMap = require("./get_sql_map");

const sqlContentMap = {};

function getSqlContent(fileName, path) {

let content = fs.readFileSync(path, "binary");

sqlContentMap[fileName] = content;

}

function getSqlContentMap() {

const sqlMap = getSqlMap();

for (let key in sqlMap) {

getSqlContent(key, sqlMap[key]);

}

return sqlContentMap;

}

module.exports = getSqlContentMap;

db目录下

对数据库连接和异步查询的封装

mysql_config.js

const mysql = require("mysql");

(function() {

// 创建数据库会话

let connection;

const connect_mysql = () => {

connection = mysql.createConnection({

host: "127.0.0.1",

user: "root",

password: "abc123",

database: "koa_demo"

});

};

const getConnection = () => connection;

module.exports = { getConnection, connect_mysql };

})();

async_db.js

const { getConnection } = require("./mysql_config");

const find = sql => {

return new Promise((resolve, reject) => {

getConnection().query(sql, (err, results, fileds) => {

if (err) return reject(err);

resolve({

results,

fileds

});

});

});

};

module.exports = {

find

};

index.js 初始化入口文件

const fs = require("fs");

const getSqlContentMap = require("./util/get_sql_content_map");

const { connect_mysql } = require("./db/mysql_config");

const { find } = require("./db/async_db");

connect_mysql();

// 打印脚本执行日志

const eventLog = function(err, sqlFile, index) {

if (err) {

console.log(

`[ERROR] sql脚本文件: ${sqlFile} 第${index + 1}条脚本 执行失败 o(╯□╰)o !`

);

} else {

console.log(

`[SUCCESS] sql脚本文件: ${sqlFile} 第${index +

1}条脚本 执行成功 O(∩_∩)O !`

);

}

};

// 获取所有sql脚本内容

const sqlContentMap = getSqlContentMap();

const createAllTables = async () => {

// key sql 名

for (let key in sqlContentMap) {

let sqlShell = sqlContentMap[key];

let sqlShellList = sqlShell.split(";");

for (let [i, shell] of sqlShellList.entries()) {

// 去除 .sql 文件中的注释内容

shell = shell.replace(/(\/\/.*)|(\/\*[\s\S]*?\*\/)/g, "");

if ((shell = shell.trim())) {

const { results } = await find(shell);

if (results.serverStatus * 1 === 2) {

eventLog(null, key, i);

} else {

eventLog(true, key, i);

}

}

}

}

console.log("sql脚本执行结束");

console.log("请按 ctrl + c 键退出!");

};

createAllTables();

执行 index.js 脚本, 如果在 sql文件书写正确的情况下:

c9012b92869e92d367163ebada2bb8a3.png

8029a9a6b76ed1db8c22988fedc95706.png

结语

通过这种方式, 我们可以初始化数据库的表结构和初始化数据。根据不同的业务场景, 在 sql 目录下创建不同的 sql 文件并通过 index.js 来初始化就可以了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值