更新 MySQL table 中的大量行
Update large number of row in MySQL table
我正在使用关系数据库(MySQL 5.7)。在这个数据库中,我有一个名为 customer_transaction 的 table。在这个 table 我有 4 列:id, customer_id, type, amount
|id|customer_id |type |amount|
|--|------------|---------|------|
|1 |44 |Credit |50 |
|2 |44 |Credit |20 |
|3 |44 |Debit |30 |
|4 |10 |Credit |30 |
现在我要在此 table 上引入一个新的余额栏(当前余额),如下所示。
|id|customer_id |type |amount|balance|
|--|------------|---------|------|-------|
|1 |44 |Credit |50 |50 |
|2 |44 |Credit |20 |70 |
|3 |44 |Debit |30 |40 |
|4 |10 |Debit |30 |-30 |
问题是,在客户交易 table 上,他们有近百万行,所有余额列都是 0.00。
所以我想重新同步所有余额数据。但我很困惑如何重新计算和更新所有这些行。我可以通过 MySQL 查询或从我的应用程序 (Laravel-PHP) 计算和更新来更新它吗?
在MySQL5.x中,window函数不可用,一个选项使用相关子查询来计算余额:
update customer_transaction ct
inner join (
select
id,
(
select sum(case type when 'Credit' then amount when 'Debit' then -amount end)
from customer_transaction ct2
where ct2.customer_id = ct1.customer_id and ct2.id <= ct1.id
) balance
from customer_transaction ct1
) ctx on ctx.id = ct.id
set ct.balance = ctx.balance
我正在使用关系数据库(MySQL 5.7)。在这个数据库中,我有一个名为 customer_transaction 的 table。在这个 table 我有 4 列:id, customer_id, type, amount
|id|customer_id |type |amount|
|--|------------|---------|------|
|1 |44 |Credit |50 |
|2 |44 |Credit |20 |
|3 |44 |Debit |30 |
|4 |10 |Credit |30 |
现在我要在此 table 上引入一个新的余额栏(当前余额),如下所示。
|id|customer_id |type |amount|balance|
|--|------------|---------|------|-------|
|1 |44 |Credit |50 |50 |
|2 |44 |Credit |20 |70 |
|3 |44 |Debit |30 |40 |
|4 |10 |Debit |30 |-30 |
问题是,在客户交易 table 上,他们有近百万行,所有余额列都是 0.00。
所以我想重新同步所有余额数据。但我很困惑如何重新计算和更新所有这些行。我可以通过 MySQL 查询或从我的应用程序 (Laravel-PHP) 计算和更新来更新它吗?
在MySQL5.x中,window函数不可用,一个选项使用相关子查询来计算余额:
update customer_transaction ct
inner join (
select
id,
(
select sum(case type when 'Credit' then amount when 'Debit' then -amount end)
from customer_transaction ct2
where ct2.customer_id = ct1.customer_id and ct2.id <= ct1.id
) balance
from customer_transaction ct1
) ctx on ctx.id = ct.id
set ct.balance = ctx.balance