You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Node.js的MySQL批量插入中如何传入UNIX_TIMESTAMP()*1000函数

解决方法

方法一:使用MySQL函数生成时间戳(推荐,依赖服务器时间)

批量插入时参数会被自动转义,直接把函数放进values数组会被当作字符串处理,因此需要将函数直接写入SQL语句的占位符模板,仅将动态的price和id作为参数传递:

let values = [
  [5000, 1],
  [6000, 2],
  [8000, 3]
];

// 为每条记录构造包含函数的占位符
const rowPlaceholders = values.map(() => '(?, ?, UNIX_TIMESTAMP()*1000)').join(',');
const query = `INSERT INTO price_table (price, id, log_date) VALUES ${rowPlaceholders};`;

// 将二维数组扁平化后作为参数传入
await db.query(query, values.flat());

这种方式既保留了批量插入的效率,又让每条记录的log_date使用MySQL服务器的当前毫秒级时间戳,同时通过参数绑定避免了SQL注入风险。

方法二:在应用层生成时间戳(依赖应用服务器时间)

如果不需要使用MySQL服务器的时间,可以直接在Node.js中生成毫秒级时间戳并加入values数组:

所有记录使用同一时间戳

const currentTimestamp = Date.now();
let values = [
  [5000, 1, currentTimestamp],
  [6000, 2, currentTimestamp],
  [8000, 3, currentTimestamp]
];

let query = `INSERT INTO price_table (price, id, log_date) VALUES ?;`;
await db.query(query, [values]);

每条记录使用各自生成的时间戳

let values = [
  [5000, 1, Date.now()],
  [6000, 2, Date.now()],
  [8000, 3, Date.now()]
];

let query = `INSERT INTO price_table (price, id, log_date) VALUES ?;`;
await db.query(query, [values]);

内容的提问来源于stack exchange,提问作者Himashu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:20:17