nodejs mysql for循环 一次写入10万条数据 不用async/await 完整代码
时间: 2024-10-16 10:18:58 浏览: 29
async/await与promise(nodejs中的异步操作问题)
5星 · 资源好评率100%
在Node.js中,一次性插入10万条数据到MySQL数据库可能会导致内存溢出,因为所有的数据都可能会被加载到内存中。为了处理这种情况,应该分批次插入数据。这里我将展示一个传统的同步for循环方式,每次插入1000条数据:
```javascript
const mysql = require('mysql2');
// 假设数据是一个二维数组,每一行代表一条记录
const data = ...; // 你需要填充数据
const connection = mysql.createConnection({
host: 'localhost',
user: 'username',
password: 'password',
database: 'database_name'
});
connection.connect((err) => {
if (err) throw err;
let offset = 0;
const batchSize = 10000; // 每批插入的数量
while (offset < data.length) {
const endOffset = Math.min(offset + batchSize, data.length);
// 准备SQL插入语句并设置参数
const sql = 'INSERT INTO your_table (column1, column2, ...) VALUES (?, ?, ...)';
const values = data.slice(offset, endOffset).map(row => row.map(val => [val]));
// 执行批量插入
connection.query(sql, values, (insertErr, result) => {
if (insertErr) {
console.error(`Error inserting rows at offset ${offset}:`, insertErr);
connection.end(); // 关闭连接,避免影响后续操作
return;
}
console.log(`Inserted ${result.affectedRows} rows from offset ${offset}`);
offset = endOffset;
});
}
connection.end(); // 数据插入完成后关闭连接
});
```
注意:这种方式适合数据量较大的情况,并不适合频繁的写入操作,因为它没有利用异步特性,可能导致阻塞。如果可能,建议还是使用异步的方式来处理大数据量的操作。
阅读全文