如何在mysql中以静态形式插入一列值



我有一个具有以下结构的表business_data

+-----------------+---------------+------+-----+----------------------+-------+
| Field           | Type          | Null | Key | Default              | Extra |
+-----------------+---------------+------+-----+----------------------+-------+
| id              | varchar(36)   | NO   | PRI | NULL                 |       |
| monthlyDate     | date          | NO   |     | 1970-01-01           |       |
| transactionId   | varchar(255)  | NO   |     | NULL                 |       |
| transactionType | varchar(255)  | NO   |     | NULL                 |       |
| number          | varchar(255)  | NO   |     | NULL                 |       |
| description     | text          | NO   |     | NULL                 |       |
| amount          | decimal(20,2) | NO   |     | NULL                 |       |
| active          | tinyint(4)    | NO   |     | 1                    |       |
| createdAt       | datetime(6)   | NO   |     | CURRENT_TIMESTAMP(6) |       |
| updatedAt       | datetime(6)   | NO   |     | CURRENT_TIMESTAMP(6) |       |
| version         | int(11)       | NO   |     | NULL                 |       |
| businessId      | varchar(36)   | YES  |     | NULL                 |       |
+-----------------+---------------+------+-----+----------------------+-------+

我正在使用一个函数将数据作为插入此表

saveBusinessData(dbConnection: any) {
let data = '[["32447e98-6a8b-40d0-a70f-157739089be1",666,"2020-08-26","some description",4,"4565","Bill",true,1]]'
return new Promise(async (resolve, reject) => {
if (data.length > 0) {
let qry =
"INSERT INTO business_data (id, businessId, amount,date,description,number,transactionId, transactionType, active, version,monthlyDate) VALUES ?";
dbConnection.query(qry, [data], async function (err: any, res: any) {
if (err) {
reject(err);
}

resolve(true)
});
}
});
}

有列'monthlyDate'。此日期不包括在数据中。对于一个CCD_ 3函数调用;值将不同,但是对于一个函数调用monthlyDate将相同。因此,与其将其添加到数据中,我希望有一种方法可以在查询中单独传递monthlyDate,这样我就不必将数据修改为具有monthlyDate值。

方法1:触发器

实现这一点的一种方法是使用数据库触发器。只要执行一个操作,就会执行一个触发器。您可以将数据库配置为在插入之前激发触发器。例如:

DELIMITER $$
CREATE TRIGGER inserted before INSERT ON hospital
FOR EACH ROW BEGIN
SET NEW.monthly_date = NOW()/1000;
--- Insert your logic here ^^
END$$

因此,当您插入到表中时,每月的行列将自动插入当前时间戳。

insert into hospital (name, bed_count) values ('Name', 2353);

结果:

+------+-----------+----+--------------+
| name | bed_count | id | monthly_date |
+------+-----------+----+--------------+
| Name |      2353 |  3 |  20200907170 |
+------+-----------+----+--------------+

方法2:更新语句

由于您存储的是创建的时间,因此可以在表上为在特定时间间隔内创建的行激发更新语句。我不知道如何在你使用的框架中做到这一点。这相当于运行以下sql:

update table set monthly_date = d3 where created_date > d1 and created_date < d2;

除非对created_date列进行了索引,否则我不建议使用第二种方法。这也可以更新未插入的行。

一种方法是向所有数组中添加一个mysql格式的日期;行";并插入生成的阵列

因为数据是我添加了CCD_ 6的字符串,所以CCD_。

这一切都在内存中运行,使用1000个左右元素的应该很快

saveBusinessData(dbConnection: any) {
let data = '[["32447e98-6a8b-40d0-a70f-157739089be1",666,"2020-08-26","some description",4,"4565","Bill",true,1]]'
return new Promise(async (resolve, reject) => {
if (data.length > 0) {
let arr = JSON.parse(data);
let index;
for (index = 0; index < arr.length; ++index) {
arr[index].unshift(date.toISOString().slice(0, 10));
}
let qry =
"INSERT INTO business_data (monthlyDate,id, businessId, amount,date,description,number,transactionId, transactionType, active, version,monthlyDate) VALUES ?";
dbConnection.query(qry, [arr], async function (err: any, res: any) {
if (err) {
reject(err);
}

resolve(true)
});
}
});
}

相关内容

  • 没有找到相关文章

最新更新